Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2

  • 20 odgovora
  • 5.535 pregleda

Najnovija ↓

Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 10.11.2001. u 12:01 · pre 304 meseca #1
Private Release : UNIX System Security Research Labs : final.version[b#3rc2]


==============================================================================
B U F F E R O V E R F L O W S B Y E X A M P L E
BIND 8.2.3-REL & ProFTPd 1.2.0rc2
=============================================[ by slash <[email protected]> ]===



(0x00) U v o d
==============

Evo odlucio sam malo pojasniti bugove u BIND-u te proftpd-u za koje slobodno
mozemo reci da su jedni od najkoristenijih DNS/FTP servisa danas. Preporucujem
ovaj tekst svatkom tko zna C ili se jednostavno bavi hackingom kako bih shvatili
gdje se nalazi bug, ili u drugom slucaju kako se nebi sve svelo na jednostavno
pokretanje exploita.



(0x01) BIND 8.2.3-REL Bug #1
============================

BIND-8.2.3-REL/src/bin/named/ns_update.c:1636

case T_SIG:
if (dlen < SIG_HDR_SIZE || size < dlen)
return (0);
memcpy(cp1, cp, SIG_HDR_SIZE);
size -= SIG_HDR_SIZE;
cp += SIG_HDR_SIZE;
cp1 += SIG_HDR_SIZE;
n = dn_expand(msg, eom, cp, (char *)cp1, size);
if (n < 0 || n + SIG_HDR_SIZE > dlen)
return (0);
cp += n;
n1 = dlen - n - SIG_HDR_SIZE;
n = strlen((char *)cp1) + 1;
cp1 += n;
/* #1 */
if (size < n1)
return (0);
memcpy(cp1, cp, n1);
cp1 += n1;
return (cp1 - cp1init);

Ova funkcija je zaduzena za procesiranje T_SIG "resouce records"-a unutar
UPDATE paketa. Buffer overflow se dogadja zato sto dolazi do asinkronizacije
pointera `cp1' i variable `size'. `cp1' je pointer u data buffer u koji se pise
kod procesiranja paketa a `size' je broj preostalih, neiskoristenih byteova
unutar buffera. U ovom slucaju autor je je zaboravio oduzeti broj byteova koji
se upisuju u buffer (putem funkcije dn_expand) od variable `size'. Ovo nam
omogucuje da prepisemo buffer sa 1025 byta (MAXDNAME) minus par byteova zbog
memcpy.

Da bi ispravili bug moramo kod oznake #1 unijeti sljedecu liniju:

size -= n;




(0x02) BIND 8.2.3-REL Bug #2
============================

BIND-8.2.3-REL/src/bin/named/ns_update.c:1655

case T_NXT:
n = dn_expand(msg, eom, cp, (char *)cp1, size);
if (n < 0 || (u_int)n >= dlen)
return (0);
size -= n;
/* #1 */
cp += n;
n1 = dlen - n;
n = strlen((char *)cp1) + 1;
cp1 += n;

if ((*cp & 0x80) == 0) {

if (n1 < 4 || n1 > 16)
return (0);
}
if (n1 > size)
return (0);
memcpy(cp1, cp, n1);
cp1 += n1;
return (cp1 - cp1init);

Ovdje autori BIND-a grijese ne znajuci svrhu svog API-a. Funkcija `dn_expand'
vraca broj byteova za koliko je povecan "processing pointer". Ali moze pisati
samo `size' byteova u uotput buffer, koji je zadan pointerom `cp1'. Ipak `size'
se smanjuje zbog pogresne vrijednosti (broja byteova za koliko se pomaknuo "source
pointer"), dok se pointer `cp1' krece normalno. Ovo moze dovesti do buffer overflowa
u kojem slucaju mozemo prepisati MAXDNAME byteova izvan buffera.

Ovi overflowi su interesantni, ali ne i korisni (osim u nekim slucajevima kad
imamo arhitekture sa razlicitim "stack layout"-om, ili imamo privilegije za
izdavanje UPDATE paketa itd.).



(0x02) ProFTPd 1.2.0rc2
=======================

proftpd-1.2.0rc2/modules/mod_ls.c:333

char *p = nameline + strlen(nameline);
...
snprintf(p, sizeof(nameline) - strlen(nameline) - 4, " -> %s", l);

Gdje je nameline buffer na stacku.

char nameline[MAXPATHLEN + MAXPATHLEN + 128] = {'\0'};

Problem se manifestira ako je strlen (nameline) > (sizeof (nameline) - 3)
zato jer parametar duljine kod snprintf funkcije postaje negativan, te se
ponasa kao normalna sprintf funkcija. Iako nije moguce postici velicinu
buffera vecu od 124 bytea, ovaj bug pokazuje da "sign conversion" bugovi
jos uvijek postoje unutar popularnih programa i danas.



(0x02) Z a k lj u c a k
=======================

U ovom tekstu sam zelio pokazati koliko je bitno citati kod programa pa i
svog po nekoliko puta, jer kod programa koji koriste puno funkcija cesto
dolazi do zabune da ni sami autori neznaju svrhu svojih API poziva.


Shouts: predator, sirius, random, #!/bin/zsh .


Unix System Security Research Labs
slash - 14. Listopad anno 2000 (18:04pm)
[email protected] / [email protected] / [email protected]
"Use the source Luke" - unknown
Potpis
Freelance security consultant -
UNIX Administrator -
www.avalon.hr - [email protected]
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 13.11.2001. u 20:53 · pre 304 meseca #4
Citat:
leka je napisao:
Nadam se da si napisao patch-eve za sve to sto si nabrojio i poslao BIND timu... Interesuje me ako si im poslao to, kako su reagovali - tj. sta oni kazu na to.



patcheve sam napisao, ali BIND dev team nisam mejlao iz jednostavnog razloga -- ne pregovaram s vendorima. Podrzavam non-discloasure (http://anti.security.is) i svoje bugove i exploite ostavljam za sebe, jer ih na kraju i pisem samo za sebe. Sebicno ? Mozda...



Potpis
Freelance security consultant -
UNIX Administrator -
www.avalon.hr - [email protected]
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 14.11.2001. u 13:49 · pre 304 meseca #5
Da, sebicno je (po meni).
Ako koristis GNU software i ako znas da napises patch onda je zaista sebicno da patch koji si napisao ne posaljes. Na kraju krajeva, da tako ne radi narod sirom sveta nebi ni bilo tako rapidnog razvoja OpenSource aplikacija.

Na nesrecu, mnogo programera, ima svoje uvrnute stavove i ne razmislja o tome da sami uzivaju blagodeti koje su stvorene u OpenSource zajednici.
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 14.11.2001. u 13:50 · pre 304 meseca #6

Pogotovo je sebicno ako OVDE napises (maltene) patch i izgubis silno vreme pisuci onaj tekst gore, isto toliko vremena si mogao da odvojis za par diff-ova... Zar ne?
Potpis
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 14.11.2001. u 23:01 · pre 304 meseca #7
Citat:
leka je napisao:

Pogotovo je sebicno ako OVDE napises (maltene) patch i izgubis silno vreme pisuci onaj tekst gore, isto toliko vremena si mogao da odvojis za par diff-ova... Zar ne?

mislim da nije stvar u tome da coveka mrzi...vec se jednostavno pridrzava politike koju propagira sajt anti.security.is. A kad na sajtu procitas obrazlozenje takve politike, sa jedne strane i jeste tako.
Potpis
VMware VCP/Microsoft MCSE 2003/HP ASE
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 20.11.2001. u 14:35 · pre 303 meseca #8
Kao prvo mislim da je odluka na meni gdje cu sto postati i dali cu obavijestiti vendore, pa zato molim da mi ne predbacujete sto svoje stvari drzim prvenstveno za sebe. Cijenim vase kritike ali mislim da bi vi isto trebali cijeniti cinjenicu da sam svoj rad odlucio podjeliti
upravo s vama, jer svrha mojeg teksta nije da objavljujem bugove kako bi netko napisao exploite, vec
da svi zajedno nesto naucimo a mislim da se i cijeli ovaj forum svodi na to. Zasto objaviti tekst u
kojem se opisuje bug a ne priloziti patch ? Pisanje patcha ostavljam spretnima s vise vremena. Moje vrijeme ipak -- kosta.


pozdrav,

sliz-ash
Potpis
Freelance security consultant -
UNIX Administrator -
www.avalon.hr - [email protected]
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 21.11.2001. u 13:16 · pre 303 meseca #10
Citat:
slash je napisao:
Kao prvo mislim da je odluka na meni gdje cu sto postati i dali cu obavijestiti vendore, pa zato molim da mi ne predbacujete sto svoje stvari drzim prvenstveno za sebe. Cijenim vase kritike ali mislim da bi vi isto trebali cijeniti cinjenicu da sam svoj rad odlucio podjeliti
upravo s vama, jer svrha mojeg teksta nije da objavljujem bugove kako bi netko napisao exploite, vec
da svi zajedno nesto naucimo a mislim da se i cijeli ovaj forum svodi na to. Zasto objaviti tekst u
kojem se opisuje bug a ne priloziti patch ? Pisanje patcha ostavljam spretnima s vise vremena. Moje vrijeme ipak -- kosta.


Goody, it's true :)
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 21.11.2001. u 13:49 · pre 303 meseca #11
I ja se slažem da ne treba da im piše patch ako ga ne plate, ali i da ne objavljuje javno gotov exploit, i dobro je što je tako i postupio.

A ovo je zaista velikodušno što je slash odlučio da objavi ovakve podatke upravo na ES-u i molim ostale da to poštuju.

Slash, good work, kao i uvek :)


Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 30.04.2003. u 01:27 · pre 286 meseci #15
Imam!
Evo je:

http://161.53.51.222/proof/scut.txt

To je original

Usporedite to sa slashevom verzijom, i vidjet cete da je 'njegov' tekst 1:1 prijepis od Scuta.

Evo, jos jednom prilazem slashovu kopiju.

http://161.53.51.222/proof/slash.txt

S tim da morate uzeti u obzir da je Scut jedan od vecih strucnjaka iz vrlo hvaljene security grupe team-teso iliti 7350 koja se bavi sigurnosnim istrazivanjima, a sigurno vam je poznato da su puno exploita napisali oni.

Prema Scutovim rijecima, slash je odnekud dobio njihovu privatnu verziju teksta koja je nekako procurila, a onda ju je slash preveo i napisao da je to njegovo i da je on otkrio te bugove. Molim komentare.
Potpis
--BoyScout
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 30.04.2003. u 03:11 · pre 286 meseci #17
Mene je zapravo mrzelo da tražim original na NET-u, mada sam znao da postoji, jer sam ga davno pročitao... Glupo je gubiti vreme na dokazivanje lamerizma naroda...

slash-a treba poštovati svejedno, znate zašto - čovek je ipak potrošio silno vreme prevodeći!

Čudi me samo da niko nije komentarisao ovo "otkriće" :)

Hehe, da li treba davati još neme mnogo poznatije skribere kod nas? - Evo jednog, svima dobro znanog - Dejan Ristanović. Čovek je, kako je moj pokojni deda znao da veli, "prepisao Boga Oca"!

Svako može da to i dokaže.
Potpis
---
GNU's Not UNIX
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 30.04.2003. u 03:15 · pre 286 meseci #18
Leko, jedna ispravka: pišući i prevodeći ... i nauči da koristiš naša slova na Linux-u! (Dragiša čitaš li?)

Citat:
leka:

Pogotovo je sebicno ako OVDE napises (maltene) patch i izgubis silno vreme pisuci onaj tekst gore, isto toliko vremena si mogao da odvojis za par diff-ova... Zar ne?

Potpis
---
GNU's Not UNIX
Re: Buffer Overflows By Example - BIND 8.2.3-REL & ProFTPd 1.2.0rc2 30.04.2003. u 13:59 · pre 286 meseci #20
Citat:
Gojko Vujovic:
I ja se slažem da ne treba da im piše patch ako ga ne plate, ali i da ne objavljuje javno gotov exploit, i dobro je što je tako i postupio.

A ovo je zaista velikodušno što je slash odlučio da objavi ovakve podatke upravo na ES-u i molim ostale da to poštuju.

Slash, good work, kao i uvek :)




Gojko se vec ufurao :) "kao i uvek" :)
Leka isto tako
Potpis
BobMarley (me) ...the legend
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme