wu.ftpd vulnerability - otazka

Mikulas Patocka mikulas na artax.karlin.mff.cuni.cz
Sobota Únor 13 18:11:31 CET 1999


>>> by vubec nevznikly. Pri normalni manipulaci s pascalskym stringem, totiz
>>> nemuzes prepsat zadnou pamet za promennou.....
>>>
>>> At zije null terminated string
>>tady nejde o to, ze je string ukoncen nulou, ale o jeho _delku_. Coz se v
>>pascalu stat nemuze, protoze max. delka stringu je IMHO 255 znaku ?
>
>napr delphi rozsireni pascalu omezuje delku stringu na 2GB a dynamicky je
>alokuje a dealokuje, umoznuje sdileni stringu (kopie stringa do jine
>promenne = kopie pointeru), takze v 256 znacich bych problem nehledal.

Ja jsem kdysi napsal objekt v C++ pro manipulaci z retezci (vcetne
onoho sdileni) a bylo to pomaly. Operace s retezci jsou dost caste a
kazda operace na takovemto objektu na nejaky (sice maly) overhead, coz
vsak ve vysledku dava velke zpomaleni. Myslis, ze delphi to maji
udelany lip? Nemaji, protoze takova vec ani efektivne napsat nejde.

Ftp server je vec, ktera musi bezet _rychle_ (i kdyz je na nem
prihlaseno 200 uzivatelu) a neco takoveho si proste nemuze dovolit.

>Samozrejme, ze nejde jen o to, ze je string ukoncen nulou ( ikdyz to s sebou
>nese zpomaleni vykonu pri operecich se stringem - kdo ma tu nulu furt
>hledat, ze?)

Rozumny programator tu nulu dvakrat nehleda. Ostatne cecko te nenuti
pouzivat takove retezce; muzes si klidne na zacatek pole napsat delku
a pak znaky ... sice se ti bude rychleji pridavat na konec, ale uvedom
si, ze na jakoukoli jinou manipulaci jsou null terminated stringy
rychlejsi. Pokud v cyklu prochazis pascalsky retezec, potrebujes na to
registry 2 (pointer a delka), zatimco na null terminated string staci
jeden.

> ale o to, ze kompilator/systemove rutiny nehlida (ani asi nema
>moznost) delku stringa. V pascalu/Delphi pascalu, proste rutiny nejprve
>zkotrolujou jestli je buffer (cilovy string dost) velky a kdyz ne tak
>prenesou jen to co se tam vejde.

Cecko je jazyk svobodny, ve kterem si muzes napsat, co chces - pokud
budes chtit pascal-stringy, tak je samozrejme mozne na ne napsat behem
peti minut p_strcpy, p_strcmp, p_strcat atd vcetne kontrol na delku.
Vysledny produkt bude ve srovnani s konkurenci pouzivajici
null-terminated stringy pomaly a neohrabany a tudiz se neujme.

Mikulas Patocka


Další informace o konferenci Linux