Sekurecaj esploristoj de Qualys
La problemo estas kaŭzita de entjera superfluo en la funkcio stralloc_readyplus(), kiu povas okazi dum prilaborado de tre granda mesaĝo. Funkciado postulis 64-bitan sistemon kun pli ol 4GB da virtuala memoro. Kiam la vundebleco estis origine analizita en 2005, Daniel J. Bernstein argumentis ke la supozo en la kodo ke la grandeco de la asignita aro ĉiam estas ene de 32-bita valoro estas bazita sur la fakto ke neniu disponigas gigabajtojn da memoro al ĉiu procezo. Dum la pasintaj 15 jaroj, 64-bitaj sistemoj sur serviloj anstataŭigis 32-bitajn sistemojn, kaj la kvanto de provizita memoro kaj reta bendolarĝo draste pliiĝis.
La prizorgantoj de qmail-pakaĵo konsideris la noton de Bernstein kaj limigis la disponeblan memoron dum komencado de la procezo qmail-smtpd (ekzemple, en Debian 10 la limo estas fiksita al 7MB). Sed inĝenieroj de Qualys trovis, ke tio ne sufiĉas kaj, krom qmail-smtpd, fora atako povas esti farita sur la qmail-loka procezo, kiu restis senrestrikta en ĉiuj testitaj pakaĵoj. Kiel pruvo, ekspluata prototipo estis preparita, kiu estis taŭga por ataki la Debianan pakaĵon kun qmail en la defaŭlta agordo.
Por organizi foran kodon dum atako, la servilo postulas 4GB da libera diskospaco kaj 8GB da RAM.
La ekspluato permesas al vi ruli ajnajn ŝelkomandojn kun la rajtoj de iu ajn uzanto en la sistemo, krom por radikaj kaj sistemuzantoj kiuj ne havas sian propran subdosierujon en la dosierujo "/home" (la qmail-local procezo estas lanĉita kun la rajtoj). de la loka uzanto al kiu liveras).
La atako estas farita
per sendado de tre granda retmesaĝo, inkluzive de pluraj kaplinioj, je proksimume 4GB kaj 576MB. Pretigi tian ĉenon en qmail-local rezultigas entjeran superfluon kiam oni provas liveri mesaĝon al la loka uzanto. Entjera superfluo tiam kondukas al bufrosuperfluo dum kopiado de datumoj kaj la ebleco anstataŭigi memorpaĝojn per libc-kodo. Manipulante la aranĝon de la transdonitaj datumoj, ankaŭ eblas reverki la adreson de la funkcio "open()", anstataŭigante ĝin per la adreso de la funkcio "system()".
Poste, en la procezo de vokado de qmesearch() en qmail-local, la dosiero ".qmail-extension" estas malfermita per la funkcio open(), kiu kondukas al la efektiva ekzekuto de la funkcio.
sistemo ("".qmail-extension"). Sed ĉar la "etendo" parto de la dosiero estas generita surbaze de la adreso de la ricevanto (ekzemple, "localuser-extension@localdomain"), atakantoj povas aranĝi ke la komando estu sendita por ruliĝi specifante la uzanton "localuser-;command". ;@localdomain” kiel la ricevanto de la mesaĝo.
Dum la kodanalizo, du vundeblecoj ankaŭ estis identigitaj en la kroma qmail-verify flikaĵo, kiu estas parto de la pakaĵo por Debian. Unua vundebleco (
Por solvi la problemon, Bernstein rekomendis ruli qmail-procezojn kun totala limo de disponebla memoro ("softlimit -m12345678"), en kiu kazo la problemo estas blokita. Kiel alternativa metodo de protekto, limigi la maksimuman grandecon de la prilaborita mesaĝo per la dosiero "kontrolo/datumbajtoj" ankaŭ estas menciita (defaŭlte ĝi ne estas kreita kun defaŭltaj agordoj qmail restas vundebla). Aldone, "kontrolo/datumbajtoj" ne protektas kontraŭ lokaj atakoj de sistemuzantoj, ĉar la limo estas nur konsiderata de qmail-smtpd.
La problemo influas la pakaĵon
fonto: opennet.ru