JavacDoor, lojisyèl malveyan Maven ki fonksyone nan moman konpilasyon an

JavacDoor: Yon Atifak Maven ki te fonksyone pandan konpilasyon, pa pandan enstalasyon an.

TL; DR

Yon atifak Maven Central pibliye kòm io.github.davidtimur:c2-lab te lage nèf vèsyon, uit ladan yo te egzekite yon chaj aksè a distans pandan konpilasyon nenpòt pwojè en aval ki te mete jar la sou chemen processeur anotasyon li an. Pa gen okenn kòd aplikasyon ki te oblije enpòte li. Pa gen okenn liy sous ki te oblije fè referans a li. Pa te gen okenn script enstalasyon, okenn ekivalan post-enstalasyon, e okenn zen sik lavi ditou pou zouti yo te ka enspekte.

Vektè ekzekisyon an se yon sèl fichye 46-okte andedan jar la: yon anrejistreman founisè sèvis Java ki nonmen yon klas ki aplike javax.annotation.processing.ProcessorKonpilatè Java a dekouvri anrejistreman sa yo otomatikman. Yon fwa yo jwenn yo, javac kreye epi egzekite klas la kòm yon pati nòmal nan konpilasyon an. Sa vle di anviwònman ekzekisyon chaj la se machin konstriksyon an, nan moman machin konstriksyon an ap fè sèl bagay li egziste pou fè a.

Nan nèf vèsyon yo, kanal kòmand ak kontwòl la te rebati twa fwa: yon URL rapèl bay pa operatè a, answit yon shell ranvèse sou yon tinèl TCP ngrok, epi yon kanal sondaj HTTP ki gen chemen yo chanje de fwa plis. Dènye vèsyon an te enstale yon manadjè konfyans TLS san operasyon kòm JVM pa defo a. aksepte nenpòt sètifika pandan tout dire konpilasyon an.

Atifak la te pote mo "C2 Lab Payload" nan pwòp POM li ak yon lisans MIT. Li te an dirèk sou Maven Central pandan tout peryòd nou te obsève li a. depi lè sa a yo te retire li, ansanm ak tout bagay li yo io.github.davidtimur gwoup sa a.

Anatomi: konpilatè a kòm motè ekzekisyon

Sistèm pwosesis anotasyon Java a egziste pou bibliyotèk yo ka jenere kòd nan moman konpilasyon an — mekanis ki dèyè Lombok, Dagger, ak yon lis long zouti ORM ak serializasyon. Yon processeur anonse tèt li ak yon fichye tèks plenn andedan jar la:

META-INF/sèvis/javax.annotation.processing.Processor

Kontni dosye sa a nan chak vèsyon ki afekte yo, mo pou mo epi konplè:

io.github.davidtimur.c2lab.C2Processor

Fichye a idantik an kantite okte atravè vèsyon 1.0.1 jiska 1.0.8, md5 7d2a08a5c8869a47eea9fa62487dfbe4. Vèsyon 1.0.0 pa genyen li.

Javanèz Lè l ap fonksyone, li eskane chemen anotasyon-processeur a pou antre sèvis sa yo epi li chaje sa li jwenn. Pa gen anyen nan pwojè k ap konpile a ki bezwen mansyone processeur a, anote anyen, oswa konfigire anyen. Prezans sou chemen an sifi. Sa a se pwopriyete ki separe JavacDoor ak modèl chèn ekipman pou pifò zouti yo bati alantou:

modèlDeklancheVizib kòm
zen enstalasyon npmnpm installscripts.postinstall nan manifest la
Chaj Python lè w ap enpòte apremye enpòtasyon modil ladeklarasyon nivo modil nan sous la
JavacDoorjavac sou nenpòt pwojè an avalyon non fichye anrejistreman sèvis

Yon hook enstalasyon se yon deklarasyon nan yon manifest, epi yon manifest se premye bagay nenpòt moun li. Yon chaj lè w ap enpòte omwen chita nan yon sous lizib. Yon anrejistreman sèvis pa ni youn ni lòt: li se yon non fichye plis yon liy ki nonmen yon klas, epi konpòtman an rete nan yon bytecode konpile ki yon anyè pi lwen.

Klas chaj la li menm fè rekonesans lame a lè li fè shelling out. Pisin konstan klas konpile yo genyen ladan yo / bin / sh, kiyes mwen ye, uname -a, pwd sou chemen Unix la ak lis travay sou chemen Windows la, ansanm ak redireksyonErèStream pou rantre rezilta erè pwosesis pitit la nan kouran kaptire a. De modèl JSON pote rezilta yo soti nan lame a — yon baliz anrejistreman:

{"host":"%s","os":"%s","user":"%s","dir":"%s"}

peple soti nan la hostname kòmand ak la non sistèm operasyon an, non itilizatè, epi itilizatè.dir pwopriyete sistèm yo, ak yon rapèl rezilta:

{"version":"%s","host":"%s","time":"%s","output":"%s"}

Makè pwogrè ki rete nan pwodiksyon konpilatè a yo etranjman sensè: [C2] ekzekisyon an lè konpilasyon an fini, [C2] rapèl voye → HTTP , [C2] koki konekte ak .

Nèf lage, twa jenerasyon C2

Piblikasyon yo pa nèf kopi yon sèl chaj. Yo se yon jounal iterasyon, epi lè w li yo nan lòd, ou ka wè ke kanal la ap rebati pandan vektè livrezon an rete fiks.

RemètOto-egzekite lè konpilasyon an ap fètChèn
1.0.0non (pa gen dosye sèvis)URL rapèl operatè a bay sèlman
1.0.1wi (vektè prezante)URL rapèl operatè a bay la
1.0.2repons lan se wiKokiy ranvèse, tinèl TCP ngrok
1.0.3repons lan se wiChanèl HTTP, /anrejistre /cmd /out
1.0.4repons lan se wiChanèl HTTP, /anrejistre /cmd /out
1.0.5repons lan se wiChanèl HTTP, /anrejistre /poll /out
1.0.6repons lan se wiChanèl HTTP, /anrejistre /poll /out
1.0.7repons lan se wiChanèl HTTP, /anrejistre /cmd
1.0.8repons lan se wiChanèl HTTP + validasyon TLS enfim

Gen twa detay nan tablo sa a ki vo lapenn mete aksan sou yo, paske chak chanje fason yo ta dwe li seri atifak la.

Vektè a rive nan 1.0.1, pa 1.0.2. Vèsyon 1.0.0 la pote menm lojik rekonesans ak rapèl la men li pa gen okenn fichye sèvis epi li pa gen okenn enpòtasyon pou pwosesis anotasyon; li fonksyone sèlman si yon bagay rele li. Apati 1.0.1, fichye sèvis la prezan epi klas konpile yo enpòte. javax.anotasyon.pwosesis.VèsyonSousSipòteNenpòt evalyasyon ki konpare de vèsyon ki gen tikè yo — 1.0.0 ak 1.0.2 — konkli kòrèkteman ke yon bagay chanje, men li mal idantifye ki kote.

Kokiy envès la egziste nan yon sèl vèsyon. Vèsyon 1.0.2 la genyen 0.tcp.ngrok[.]io, liy jounal la [C2] koki konekte ak 0.tcp.ngrok[.]io:19823, yon banyè entèaktif kokiy c2, ak yon tèminè ankadreman __FIN__Vèsyon 1.0.3 yo ak pi wo yo pa genyen okenn nan sa yo epi yo rive sou yon lame HTTPS. Yon demann pou retire ki sèlman nonmen vèsyon ki gen tikè yo ta site yon pwen final TCP ki pa aktif pandan l ap kite kanal HTTP aktif la, ki prezan nan sis vèsyon ki pi resan, san mansyone.

Dènye vèsyon an retire verifikasyon transpò a. Vèsyon 1.0.8 ajoute yon klas ki aplike javax.net.ssl.X509TrustManager ki gen metòd verifikasyon sètifika ki pa fè anyen, yon verifikatè non lame ki toujou vre ki anrejistre atravè setDefaultHostnameVerifier, Ak yon konfyansTout woutin ki enstale tou de kòm paramèt defo JVM a. Rezilta a se ke pou rès konpilasyon sa a, JVM a aksepte nenpòt sètifika ki soti nan nenpòt lame — pa sèlman pou trafik pwòp chaj la, men pou nenpòt lòt bagay konpilasyon an fè sou TLS apre sa.

Nan tout sis vèsyon ki itilize li yo, kanal HTTP a gen yon sèl lame ki dirije l: tableful-fervor-crazed.ngrok-free[.]devChak demann pote header la avètisman-navigatè-ngrok-skip, ki siprime paj entèstisyèl ke tinèl ngrok gratis yo sèvi navigatè yo. Ansanm chemen yo chanje selon vèsyon yo — /soti disparèt nan 1.0.7, epi /kmd altène ak / biwo vòt — men otès la pa janm chanje.

Rakonte oto-esklizyon an

Chak POM apati vèsyon 1.0.1 annapre mete yon agiman konpilatè pou pwòp konstriksyon atifak la:

-proc:okenn

Drapo sa a dezaktive pwosesis anotasyon an. Efè li isit la se precise: lè pwojè ki gen processeur a li menm konpile, processeur a pa fonksyone.

Drapo sa a gen itilizasyon ki antyèman òdinè. Yon pwojè ki gen yon processeur anotasyon souvan bezwen evite aplike processeur sa a sou tèt li pandan demaraj, epi dokimantasyon zouti konstriksyon an rekòmande egzakteman sa. Lè li pran poukont li, li pa pwouve anyen.

Men, lè nou konsidere sa processeur a fè, li dekri yon asimetri espesifik: kòd la egzekite sou machin tout moun ki konpile kont atifak la, epi non pa sou machin ki konstwi atifak la. Drapo a parèt nan menm vèsyon ki prezante fichye sèvis la — 1.0.1 — epi nan chak vèsyon apre li. Korelasyon ki genyen ant "vèsyon kote ekzekisyon an lè konpilasyon an kòmanse" ak "vèsyon kote ekzekisyon an lè konpilasyon an etenn lokalman" se siyal analitik ki pi itil nan seri atifak la, epi li vizib nan yon POM tèks plenn san dekonpilasyon anyen.

Nou remake efè a epi nou rete la. Pa gen anyen nan objè yo ki eksplike poukisa yo te mete drapo a.

Yon lòt metadone merite mansyone, sitou pou debarase m de li. POM nan rele pwojè a "C2 Lab Payload", li dekri li kòm yon "artefak C2 lab payload", epi li ba li lisans MIT. Pafwa yo ofri oto-etikèt sa a kòm prèv ke yon pake se yon egzèsis rechèch.cise olye de yon menas vivan, epi pafwa lekti sa a kòrèk — yon kanari deklare san okenn enfrastrikti aksesib se yon objè diferan de sa a. Li pa aplike isit la. Yon enplant fonksyonèl pibliye nan yon depo piblik, aksesib pa nenpòt konsomatè, ak yon enfrastrikti sortan ki te rebati twa fwa sou nèf vèsyon, se yon kapasite vivan kèlkeswa sa metadone li yo rele li. Non an nan POM nan pa chanje anyen sou sa k ap pase sou yon machin ki konpile kont li.

Endikatè pou machin konstriksyon

Si yon lame konstriksyon konpile kont atifak sa a, prèv la chita nan jounal konstriksyon ak telemetri rezo olye de yon enplantasyon pèsistan sou disk — chaj la ap fonksyone andedan pwosesis konpilatè a epi li sòti avè l.

Nan kach jar la oswa nan depo lokal la

  • META-INF/services/javax.annotation.processing.Processor nonmen io.github.davidtimur.c2lab.C2Processor
  • Fichye sèvis md5 7d2a08a5c8869a47eea9fa62487dfbe4
  • Klas anba io/github/davidtimur/c2lab/: C2Processor, C2Task, Task, epi nan 1.0.8 klas enteryè a Task$1

Pwodiksyon nan konstriksyon

  • [C2] compile-time execution complete
  • [C2] callback sent → HTTP
  • [C2] callback failed:
  • [C2] shell connected to
  • Banyè entèaktif c2-shell; tèminè ankadreman __END__

Telemetri an pwosesis

  • javac kòm paran nan /bin/sh -c (Unix) oubyen yon entèprèt kòmand Windows
  • Kòmandman timoun yo whoami, uname -a, pwd (Unix) oubyen tasklist (Windows) paran pa yon etap konpilasyon

Nan telemetri rezo a

  • TCP sortan pou 0.tcp.ngrok[.]io:19823 (vèsyon 1.0.2)
  • HTTPS pou tableful-fervor-crazed.ngrok-free[.]dev, chemen /register, /cmd, /poll, /out (vèsyon 1.0.3 rive 1.0.8)
  • Antèt demann lan ngrok-skip-browser-warning: true
  • Demann kò ki koresponn {"host":...,"os":...,"user":...,"dir":...} or {"version":...,"host":...,"time":...,"output":...}

Nan konfigirasyon

  • Varyab anviwònman CALLBACK, CALLBACK_URLpwopriyete sistèm callback.url

Metadone piblikatè a

  • Gwoup io.github.davidtimuradrès piblikatè a davudboi999@gmail[.]comkle siyati a E520C345EF94423D

Yon vèsyon ki te kouri vèsyon 1.0.8 la merite yon verifikasyon anplis. Piske vèsyon sa a enstale yon manadjè konfyans permisif kòm yon default nan tout JVM a, nenpòt koneksyon TLS ki te fèt pita nan menm JVM a — rezolisyon depandans, telechajman atifak, yon etap deplwaman — te kontinye san validasyon sètifika. Trafik ki soti nan fenèt sa a pa ta dwe sipoze otantifye.

Poukisa objè konpile yo bezwen diferan eskanè

JavacDoor se yon ka tès itil paske li defèt de sipozisyon komen an menm tan, epi ni youn ni lòt echèk pa espesifik pou zouti okenn vandè.

Premye sipozisyon an se ke kòd danjere anonse tèt li nan yon manifest. Yon gwo kantite zouti chèn ekipman òganize otou sik lavi a hooks, paske pou npm ak PyPI se la aksyon an ye dabitid. JavacDoor pa gen okenn hook. Deklanchè li se yon fichye anrejistreman sèvis ki gen non yon koòdone Java epi ki gen kontni yon non klas. Pou trape sa estatikman ou dwe trete META-INF/sèvis/javax.annotation.processing.Processor kòm yon pwen antre ekzekisyon nan pwòp dwa li, sou menm nivo ak yon apre enstalasyon script — epi swiv klas ki gen non an nan bytecode. Ekosistem yo gen pwòp mekanis oto-dekouvèt yo ki gen fòm sa a, epi chak se yon pwen antre kit zouti a enumere li kòm youn kit li pa enumere li.

Dezyèm sipozisyon an se ke chenn yo ap viv nan fichye sous yo. Pou yon jar, pwen final yo, kòmandman shell yo, modèl JSON yo, ak makè jounal yo tout nan pisin konstan yo nan .klas fichye yo. Zouti ki greps tèks la pa jwenn anyen — pa paske chèn yo bouche, men paske yo nan yon veso binè estriktire ke yon eskan tèks pa analize. Chak endikatè rezo nan pòs sa a soti nan analiz pisin konstan. Youn nan yo se yon konplètman fòme https:// URL la chita an plen vi andedan yon fichye klas; yon eskanè tèks nan kontni lizib jar la toujou pa ta montre li. Pa gen okenn kodaj pou defèt isit la, se sèlman yon fòma kontenè pou li.

Toulede espas vid yo gen menm fòm nan: yo te trete yon fòma atifak kòm yon sak dosye olye de yon estrikti ak semantik defini. Koreksyon an pa gen anpil cham — analize veso a, enumere pwen antre oto-dekouvèt ekosistèm nan, epi swiv yo nan kòd konpile a. Pou vektè konstriksyon an espesyalman, yon twazyèm verifikasyon bon mache epi etonan pou dyagnostik: konpare sa yon atifak fè konsomatè yo ak sa li egzante tèt li de li. Yon atifak ki anrejistre yon processeur konpilasyon epi an menm tan dezaktive pwosesis konpilasyon pou pwòp konstriksyon li te di ou yon bagay sou tèt li nan de liy POM tèks plenn.

Pou ekip k ap itilize atifak Maven jodi a, gen twa mezi pratik ki swiv:

  • Trete chemen processeur anotasyon an kòm yon limit ekzekisyon. Depandans ki rive la yo egzekite kòd nan build ou a. Lè yon build pa bezwen pwosesis anotasyon, -proc:okenn itil defansivman menm jan li te ye lokalman isit la; kote li fè sa, li fikse seri processeur a eksplisitman olye pou eritye li nan chemen klas konpilasyon an.
  • Sou-pwosesis konpilatè jounal yo. Yon etap konpilasyon ki kreye yon shell se yon anomali nan pifò pwojè epi li fasil pou jwenn avètisman.
  • Pa trete metadone yo kòm temwayaj. "Lab", "test", "payload", ak "PoC" nan yon non oswa deskripsyon pake pa limit dimansyon. Aksesibilite ak konpòtman yo limit.

Yo te retire atifak la ak tout gwoup li a nan Maven Santral apre rapò nou an; tou de chemen atifak la ak chemen gwoup la kounye a retounen 404, epi endèks Santral la pa rapòte okenn kowòdone ki koresponn. Sa fèmen atifak sa a. Li pa fèmen vektè a, ki se yon karakteristik dokimante nan konpilatè Java a epi ki disponib pou nenpòt moun ki pibliye yon jar.

Referans

Pòs sa a pa site okenn sous ekstèn. Tout rezilta yo se analiz estatik premye men sou nèf bokal pibliye yo, rekipere nan Maven Central anvan yo te retire yo. Pa gen okenn kòd ki soti nan atifak yo ki te egzekite nan okenn moman.

zouti-lojisyèl-sca-tools-konpozisyon-analiz-zouti
Priyorize, korije, epi pwoteje risk lojisyèl ou yo
Jwenn Kont Gratui ou.
Pa gen kat kredi obligatwa.

Pwoteje Devlopman ak Livrezon Lojisyèl ou

avèk Xygeni Product Suite