TL; DR
Artifatt ta' Maven Central ippubblikat bħala io.github.davidtimur:c2-lab bagħtet disa' rilaxxi, tmienja minnhom eżegwew payload ta' aċċess remot matul il-kumpilazzjoni ta' kwalunkwe proġett downstream li poġġa l-jar fuq il-mogħdija tal-proċessur tal-annotazzjoni tiegħu. L-ebda kodiċi tal-applikazzjoni ma kellu għalfejn jimportah. L-ebda linja tas-sors ma kellha għalfejn tirreferi għalih. Ma kien hemm l-ebda skript ta' installazzjoni, l-ebda ekwivalenti ta' wara l-installazzjoni, u l-ebda hook taċ-ċiklu tal-ħajja ta' kwalunkwe tip biex l-għodda tkun tista' tispezzjona.
Il-vettur tal-eżekuzzjoni huwa fajl wieħed ta' 46 byte ġewwa l-jar: reġistrazzjoni ta' fornitur tas-servizz Java li ssemmi klassi li timplimenta javax.annotation.processing.ProcessorIl-kumpilatur Java jiskopri dawn ir-reġistrazzjonijiet awtomatikament. Ladarba jinstabu, javac joħloq istanzja u jħaddem il-klassi bħala parti normali tal-kumpilazzjoni. Dan ifisser li l-ambjent ta' eżekuzzjoni tal-payload huwa l-magna tal-bini, fil-mument li l-magna tal-bini tkun qed tagħmel l-unika ħaġa li teżisti biex tagħmel.
Fid-disa' rilaxxi, il-kanal tal-kmand u l-kontroll inbena mill-ġdid tliet darbiet: URL ta' callback ipprovdut mill-operatur, imbagħad reverse shell fuq mina TCP ngrok, imbagħad kanal ta' polling HTTP li l-mogħdijiet tiegħu nbidlu darbtejn oħra. L-aħħar rilaxx installat maniġer tal-fiduċja TLS mingħajr operazzjoni bħala l-inadempjenza tal-JVM, l-aċċettazzjoni ta' kwalunkwe ċertifikat għat-tul tal-kumpilazzjoni.
L-artefatt kellu l-kliem "C2 Lab Payload" fil-POM tiegħu stess u liċenzja tal-MIT. Kien live fuq Maven Central għall-perjodu kollu li osservajnieh u minn dakinhar tneħħa, flimkien mal-materjal kollu tiegħu io.github.davidtimur grupp.
Anatomija: il-kumpilatur bħala magna tal-eżekuzzjoni
Il-qafas tal-ipproċessar tal-annotazzjoni ta' Java jeżisti sabiex il-libreriji jkunu jistgħu jiġġeneraw kodiċi fil-ħin tal-kumpilazzjoni — il-mekkaniżmu wara Lombok, Dagger, u lista twila ta' għodod ORM u tas-serjalizzazzjoni. Proċessur iħabbar lilu nnifsu b'fajl ta' test sempliċi ġewwa l-jar:
META-INF/servizzi/javax.annotation.proċessar.Proċessur
Il-kontenut ta’ dak il-fajl f’kull rilaxx affettwat, kelma b’kelma u komplut:
io.github.davidtimur.c2lab.C2Processor
Il-fajl huwa identiku għall-byte fir-rilaxxi 1.0.1 sa 1.0.8, md5 7d2a08a5c8869a47eea9fa62487dfbe4. Ir-rilaxx 1.0.0 ma fihiex dan.
Meta Ġavaniż Meta jaħdem, jiskennja l-mogħdija tal-proċessur tal-annotazzjoni għal dawn l-entrati tas-servizz u jgħabbi dak li jsib. Xejn fil-proġett li qed jiġi kkompilat m'għandu bżonn isemmi l-proċessur, jannota xi ħaġa, jew jikkonfigura xi ħaġa. Il-preżenza fuq il-mogħdija hija biżżejjed. Din hija l-proprjetà li tissepara JavacDoor mill-mudelli tal-katina tal-provvista li madwarhom hija mibnija l-biċċa l-kbira tal-għodda:
| Pattern | grillu | Viżibbli bħala |
|---|---|---|
| ganċ tal-installazzjoni npm | npm install | scripts.postinstall fil-manifest |
| Pagament ta' importazzjoni fil-ħin tal-Python | l-ewwel importazzjoni tal-modulu | dikjarazzjoni fil-livell tal-modulu fis-sors |
| JavacDoor | javac fuq kwalunkwe proġett downstream | isem ta' fajl ta' reġistrazzjoni tas-servizz |
Hook ta' installazzjoni huwa dikjarazzjoni f'manifest, u manifest huwa l-ewwel ħaġa li xi ħadd jaqra. Payload fil-ħin tal-importazzjoni għall-inqas jinsab f'sors li jinqara. Reġistrazzjoni ta' servizz mhija l-ebda waħda minnhom: huwa isem ta' fajl flimkien ma' linja waħda li ssemmi klassi, u l-imġiba tinsab f'bytecode kkumpilat direttorju 'l bogħod.
Il-klassi tal-payload innifisha twettaq rikonoxximent tal-host billi tagħmel shelling out. Il-pools kostanti tal-klassijiet ikkumpilati fihom / Bin / sh, Whoami, uname -a, pwd fuq il-mogħdija tal-Unix u tasklist fuq il-mogħdija tal-Windows, flimkien ma' rindirizzaErrorStream biex jingħaqad l-output tal-iżball tal-proċess tat-tifel mal-istream maqbud. Żewġ mudelli JSON iġorru r-riżultati mill-host — beacon ta' reġistrazzjoni:
{"host":"%s","os":"%s","user":"%s","dir":"%s"}
popolati mill- hostname kmand u l isem tal-os, isem tal-utent, u dir.utent proprjetajiet tas-sistema, u sejħa lura tar-riżultat:
{"version":"%s","host":"%s","time":"%s","output":"%s"}
Il-markaturi tal-progress li jitħallew fl-output tal-kumpilatur stess huma mhux tas-soltu sinċieri: [C2] eżekuzzjoni fil-ħin tal-kumpilazzjoni kompluta, [C2] sejħa lura mibgħuta → HTTP , Qoxra [C2] konnessa ma' .
Disa’ rilaxxi, tliet ġenerazzjonijiet C2
Ir-rilaxxi mhumiex disa' kopji ta' payload wieħed. Huma log ta' iterazzjoni, u l-qari tagħhom fl-ordni juri li l-kanal qed jinbena mill-ġdid filwaqt li l-vettur tal-kunsinna baqa' fiss.
| Rilaxx | Eżegwixxi awtomatikament waqt il-kumpilazzjoni | Channel |
|---|---|---|
1.0.0 | le (l-ebda fajl tas-servizz) | URL ta' callback ipprovdut mill-operatur biss |
1.0.1 | iva (vettur introdott) | URL ta' callback ipprovdut mill-operatur |
1.0.2 | iva | Qoxra inversa, mina TCP ngrok |
1.0.3 | iva | Kanal HTTP, /reġistru /cmd /ħruġ |
1.0.4 | iva | Kanal HTTP, /reġistru /cmd /ħruġ |
1.0.5 | iva | Kanal HTTP, /reġistru /poll /ħruġ |
1.0.6 | iva | Kanal HTTP, /reġistru /poll /ħruġ |
1.0.7 | iva | Kanal HTTP, /reġistru /cmd |
1.0.8 | iva | Il-kanal HTTP + il-validazzjoni TLS diżattivata |
Tliet dettalji f'dik it-tabella ta' min ifassluhom, għax kull wieħed ibiddel kif għandu jinqara s-sett ta' artefatti.
Il-vettur jasal għal 1.0.1, mhux 1.0.2. Ir-rilaxx 1.0.0 iġorr l-istess loġika ta' rikonoxximent u sejħa lura iżda m'għandu l-ebda fajl tas-servizz u l-ebda importazzjonijiet ta' pproċessar ta' annotazzjoni; jaħdem biss jekk xi ħaġa ssejħilha. Mill-1.0.1 il-fajl tas-servizz huwa preżenti u l-klassijiet ikkumpilati jimportaw javax.annotation.processing.SupportedSourceVersionKwalunkwe valutazzjoni li tqabbel iż-żewġ rilaxxi b'biljetti — 1.0.0 u 1.0.2 — tikkonkludi b'mod korrett li xi ħaġa nbidlet, iżda tidentifika ħażin fejn.
Il-qoxra inversa teżisti f'rilaxx wieħed eżatt. Ir-rilaxx 1.0.2 fih 0.tcp.ngrok[.]io, il-linja tal-log [C2] shell konnessa ma' 0.tcp.ngrok[.]io:19823, banner interattiv qoxra c2, u terminatur tal-frejm __END__Ir-rilaxxi 1.0.3 'il quddiem ma fihom l-ebda waħda minn dawn u minflok jilħqu host HTTPS. Talba għal tneħħija li ssemmi biss ir-rilaxxi bil-biljetti kienet tiċċita endpoint TCP mejjet filwaqt li tħalli l-kanal HTTP ħaj, preżenti f'sitt rilaxxi aktar tard, mhux imsemmi.
Ir-rilaxx finali jneħħi l-verifika tat-trasport. Ir-rilaxx 1.0.8 iżid klassi li timplimenta javax.net.ssl.X509TrustManager li l-metodi ta' verifika taċ-ċertifikati tagħhom ma jagħmlu xejn, verifikatur tal-isem tal-host li dejjem ikun veru rreġistrat permezz ta' setDefaultHostnameVerifier, U fiduċjaKollha rutina li tinstalla t-tnejn bħala d-defaults tal-JVM. L-effett huwa li għall-bqija ta' dik il-kumpilazzjoni, il-JVM taċċetta kwalunkwe ċertifikat minn kwalunkwe host — mhux biss għat-traffiku tal-payload stess, iżda għal kull ħaġa oħra li l-bini jagħmel fuq TLS wara.
Il-kanal HTTP, fis-sitt rilaxxi kollha li jużawh, huwa mmexxi minn host wieħed: tableful-fervor-crazed.ngrok-free[.]devKull talba ġġorr il-header twissija dwar il-browser ngrok-skip, li jrażżan il-paġna interstizjali li t-tunnels ngrok b'xejn iservu lill-browsers. Is-settijiet tal-mogħdijiet jinbidlu bejn ir-rilaxxi — /barra jisparixxi f'1.0.7, u /kmd jalterna ma' /poll — iżda l-ospitant qatt ma jinbidel.
L-awtoesklużjoni tgħid
Kull POM mill-verżjoni 1.0.1 'il quddiem jistabbilixxi argument tal-kumpilatur għall-bini tal-artifatt stess:
-proc:xejn
Dik il-bandiera tiddiżattiva l-ipproċessar tal-annotazzjoni. L-effett tagħha hawnhekk huwa precise: meta l-proġett li fih il-proċessur ikun ikkumpilat hu stess, il-proċessur ma jaħdimx.
Din il-bandiera għandha użi kompletament ordinarji. Proġett li jinkludi proċessur ta' annotazzjoni spiss ikollu bżonn jevita li japplika dak il-proċessur għalih innifsu waqt il-bootstrap, u d-dokumentazzjoni tal-build-tool tirrakkomanda eżattament dan. Waħedha ma tipprova xejn.
Madankollu, meta meħud flimkien ma' dak li jagħmel il-proċessur, dan jiddeskrivi assimetrija speċifika: il-kodiċi jiġi eżegwit fuq il-magni ta' kull min jikkompila kontra l-artifatt, u mhux fuq il-magna li tibni l-artifatt. Il-bandiera tidher fl-istess rilaxx li jintroduċi l-fajl tas-servizz — 1.0.1 — u f'kull rilaxx warajh. Il-korrelazzjoni bejn "ir-rilaxx fejn tibda l-eżekuzzjoni fil-ħin tal-kumpilazzjoni" u "r-rilaxx fejn l-eżekuzzjoni fil-ħin tal-kumpilazzjoni tintefa lokalment" hija l-aktar sinjal analitiku utli fis-sett tal-artifatti, u hija viżibbli f'POM b'test sempliċi mingħajr ma tiġi dekompilata xejn.
Ninnotaw l-effett u nieqfu hemm. Xejn fl-artefatti ma jgħid għaliex twaqqfet il-bandiera.
Biċċa oħra ta' metadata ta' min isemmiha, l-aktar biex tintrema. Il-POM issemmi l-proġett "C2 Lab Payload", tiddeskrivih bħala "artefatt tat-tagħbija tal-laboratorju C2", u tagħtih liċenzja MIT. Awtotikkettar ta' dan it-tip xi kultant jiġi offrut bħala evidenza li pakkett huwa eżerċizzju ta' riċerka.cise minflok theddida ħajja, u kultant dik il-qari hija korretta — kanarju ddikjarat mingħajr infrastruttura li tista' tintlaħaq huwa oġġett differenti minn dan. Ma japplikax hawn. Impjant funzjonali ppubblikat f'repożitorju pubbliku, li jista' jintlaħaq minn kwalunkwe konsumatur, b'infrastruttura 'l barra li nbniet mill-ġdid tliet darbiet f'disa' rilaxxi, huwa kapaċità ħajja irrispettivament minn kif isejħilha l-metadata tagħha. L-isem fil-POM ma jbiddel xejn dwar x'jiġri fuq magna li tikkumpila kontriha.
Indikaturi għall-magni tal-bini
Jekk host tal-bini jkun ikkumpila kontra dan l-artefatt, l-evidenza tkun fil-logs tal-bini u t-telemetrija tan-netwerk minflok f'impjant persistenti fuq id-diska — il-payload jaħdem ġewwa l-proċess tal-kumpilatur u joħroġ miegħu.
Fil-jar jew fil-cache tar-repożitorju lokali
META-INF/services/javax.annotation.processing.Processortismijaio.github.davidtimur.c2lab.C2Processor- Fajl tas-servizz md5
7d2a08a5c8869a47eea9fa62487dfbe4 - Klassijiet taħt
io/github/davidtimur/c2lab/:C2Processor,C2Task,Task, u f'1.0.8 il-klassi ta' ġewwaTask$1
Output fil-bini
[C2] compile-time execution complete[C2] callback sent → HTTP[C2] callback failed:[C2] shell connected to- Banner interattiv
c2-shellterminatur tal-frejm__END__
Telemetrija fil-proċess
javacbħala l-ġenitur ta'/bin/sh -c(Unix) jew interpretu tal-kmandi tal-Windows- Kmandi tat-tfal
whoami,uname -a,pwd(Unix) jewtasklist(Windows) imdaħħal minn pass ta' kumpilazzjoni
Telemetrija fin-netwerk
- TCP 'il barra lejn
0.tcp.ngrok[.]io:19823(rilaxx 1.0.2) - HTTPS għal
tableful-fervor-crazed.ngrok-free[.]dev, mogħdijiet/register,/cmd,/poll,/out(rilaxxi 1.0.3 sa 1.0.8) - Intestatura tat-talba
ngrok-skip-browser-warning: true - Korpi tat-talbiet li jaqblu
{"host":...,"os":...,"user":...,"dir":...}or{"version":...,"host":...,"time":...,"output":...}
Fil-konfigurazzjoni
- Varjabbli ambjentali
CALLBACK,CALLBACK_URL; proprjetà tas-sistemacallback.url
Metadata tal-pubblikatur
- Grupp
io.github.davidtimur; indirizz tal-pubblikaturdavudboi999@gmail[.]com; ċavetta tal-iffirmarE520C345EF94423D
Bini li ħaddem ir-rilaxx 1.0.8 jirrikjedi kontroll żejjed. Minħabba li dak ir-rilaxx jinstalla maniġer ta' fiduċja permissiv bħala default għall-JVM kollha, kwalunkwe konnessjoni TLS li ssir aktar tard fl-istess JVM — riżoluzzjoni tad-dipendenza, upload ta' artefatti, pass ta' skjerament — kompliet mingħajr validazzjoni taċ-ċertifikat. It-traffiku minn dik it-tieqa m'għandux jiġi preżunt li huwa awtentikat.
Għaliex l-artefatti kkumpilati jeħtieġu skennjar differenti
JavacDoor huwa każ ta' test utli għaliex jegħleb żewġ suppożizzjonijiet komuni f'daqqa, u l-ebda falliment mhu speċifiku għall-għodda ta' xi bejjiegħ wieħed.
L-ewwel suppożizzjoni hija li kodiċi perikoluż iħabbar lilu nnifsu f'manifest. Ħafna mill-għodod tal-katina tal-provvista huma organizzati madwar iċ-ċiklu tal-ħajja hooks, għax għal npm u PyPI hemmhekk ġeneralment tkun l-azzjoni. JavacDoor m'għandux hook. It-trigger tiegħu huwa fajl ta' reġistrazzjoni tas-servizz li ismu huwa interface Java u l-kontenut tiegħu huwa isem ta' klassi. Biex taqbad dan statikament trid tittratta META-INF/servizzi/javax.annotation.proċessar.Proċessur bħala punt tad-dħul għall-eżekuzzjoni fih innifsu, bl-istess mod bħal wara l-installazzjoni skript — u mbagħad issegwi l-klassi msemmija fil-bytecode. L-ekosistemi għandhom il-mekkaniżmi ta' awtoskoperta tagħhom stess ta' din il-forma, u kull wieħed huwa punt tad-dħul kemm jekk l-għodda telenkah bħala wieħed kif ukoll jekk le.
It-tieni suppożizzjoni hija li l-kordi jgħixu fil-fajls tas-sors. Għal jar, l-endpoints, il-kmandi tax-shell, il-mudelli JSON, u l-markaturi tal-log huma kollha fil-pools kostanti ta' .klassi fajls. Għodda li tagħmel greps test ma ssib xejn — mhux għax il-kordi huma mgħottija, iżda għax jinsabu f'kontenitur binarju strutturat li skennjar tat-test ma janalizzax. Kull indikatur tan-netwerk f'din il-kariga ħareġ minn parsing ta' constant-pool. Wieħed minnhom huwa iffurmat kompletament https:// URL li tinsab f'post ċar ġewwa fajl tal-klassi; skennjar tat-test tal-kontenut leġġibbli tal-jar xorta ma jurihx. M'hemm l-ebda kodifikazzjoni x'tingħeleb hawn, biss format ta' kontenitur x'tinqara.
Iż-żewġ lakuni għandhom l-istess forma: format ta' artefatt ġie ttrattat bħala pakkett ta' fajls aktar milli bħala struttura b'semantika definita. Il-korrettiv mhuwiex glamoruż — analizza l-kontenitur, enumera l-punti tad-dħul tal-iskoperta awtomatika tal-ekosistema stess, u segwihom fil-kodiċi kkumpilat. Għal vettori tal-ħin tal-bini speċifikament, it-tielet kontroll huwa rħis u sorprendentament dijanjostiku: qabbel dak li jagħmel artefatt lill-konsumaturi ma' dak li jeżenta lilu nnifsu minnu. Artefatt li jirreġistra proċessur tal-ħin tal-kumpilazzjoni u fl-istess ħin jiddiżattiva l-ipproċessar tal-ħin tal-kumpilazzjoni għall-bini tiegħu stess qallek xi ħaġa dwaru nnifsu f'żewġ linji ta' POM b'test sempliċi.
Għat-timijiet li jikkunsmaw artifatti Maven illum, isegwu tliet miżuri prattiċi:
- Ittratta l-mogħdija tal-proċessur tal-annotazzjoni bħala konfini tal-eżekuzzjoni. Id-dipendenzi li jaslu hemm imexxu l-kodiċi fil-bini tiegħek. Fejn bini ma jeħtieġx ipproċessar ta' annotazzjoni, -proc:xejn huwa utli b'mod difensiv daqs kemm jidher li kien lokalment hawn; fejn jagħmel dan, ippinja s-sett tal-proċessur b'mod espliċitu minflok ma tiwirtu mill-classpath tal-kumpilazzjoni.
- Sottoproċessi tal-kumpilatur tal-log. Pass ta' kumpilazzjoni li joħloq shell huwa anomalu fil-biċċa l-kbira tal-proġetti u jista' jiġi allertat b'mod trivijali.
- Tittrattax il-metadata bħala xhieda. “Lab”, “test”, “payload”, u “PoC” f’isem jew deskrizzjoni ta’ pakkett mhumiex limiti tal-ambitu. L-aċċessibilità u l-imġiba huma.
L-artefatt u l-grupp kollu tiegħu tneħħew minn Maven Ċentrali wara r-rapport tagħna; kemm il-mogħdija tal-artefatt kif ukoll il-mogħdija tal-grupp issa jirritornaw 404, u l-indiċi Ċentrali ma jirrapporta l-ebda koordinati li jaqblu. Dan jagħlaq dan l-artefatt. Ma jagħlaqx il-vettur, li hija karatteristika dokumentata tal-kumpilatur Java u disponibbli għal kull min jippubblika jar.
Referenzi
Din il-posta ma tikkwota l-ebda sors estern. Is-sejbiet kollha huma analiżi statika diretta tad-disa' vażetti ppubblikati, irkuprati minn Maven Central qabel ma tneħħew. L-ebda kodiċi mill-artefatti ma ġie eżegwit f'xi punt.







