On Thu, 10 Apr 2014, Dan Lukes wrote:

> Pokud vim ja, tak chyba spocina v nekontrolovani pripustnych hodnot zaslanych
> parametru, takze klient si dokaze vyzadat odpoved vetsi, nez je na serveru
> buffer na ni vyhrazeny. Ergo zpet dostane nejen tento buffer, ale taky vse, co
> je za nim, az do velikosti 64kB.

        dival jsem se po praci na ten changeset.  Je to tak.  Co se deje 
presne je, ze dle RFC ta data, co odesilatel v heartbeat paketu posle, musi 
prijemce poslat zpatky, pokud souhlasi "payload_length" se skutecnou 
velikosti payloadu, jinak to ma zahodit.  A tohle OpenSSL nekontrolovalo.

        na strane prijemce dostane heartbeat funkce odkaz na pamet, kde je 
skutecny payload.  Pak alokuje pamet velikosti toho payload_length fieldu 
(ktery mohl lhat), data se zkopiruji a poslou zpatky.

        takze kdyz jsem v payload_length rekl, ze posilam 64KB dat (je to 
short int), ale do payloadu jsem dal pouze jeden bajt, tak zbylych 64KB-1 
bajtu se zkopirovalo do odchoziho paketu z pameti, ktera byla za tim 
ulozenym prichozim paketem a patrila necemu jinemu.

        je to tak jednoduchy, az z toho fakt mrazi.  Divil bych se, kdyby 
tohle ruzny instituce nevedely davno.  Staci platit par desitek lidi, ktery 
budou metodicky zkoumat kazdou zmenu v zakladnich security toolkitech a 
programech.  A to bude na cely rok stat asi tak jako jeden dva tanky.

-- 
Jan Pechanec <jp (at) devnull (dot) cz>
http://www.devnull.cz
-- 
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem