From 4b617c9182d032ebca67edf38a621ca153f660af Mon Sep 17 00:00:00 2001 From: Dennis Bijlsma Date: Mon, 17 Nov 2025 14:44:47 +0100 Subject: [PATCH 1/6] Beta version Sigrid CI for Security. --- docs/images/ci/security-feedback.png | Bin 0 -> 280172 bytes docs/reference/client-script-usage.md | 2 +- docs/sigridci-integration/using-sigridci.md | 31 ++++++++++++++++++++ sigridci/sigridci.py | 10 +++---- sigridci/sigridci/capability.py | 2 ++ sigridci/sigridci_feedback.py | 12 ++++---- 6 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 docs/images/ci/security-feedback.png diff --git a/docs/images/ci/security-feedback.png b/docs/images/ci/security-feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..965eff81fc1e9009840e74c21e271bf978a9ef79 GIT binary patch literal 280172 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�erqtkbK$E@$)1h#ZzV{eCs8Gg zf7EO4YuXn+jZ)3#9I!`pa@kod5;@m(!GgXr+3IjCkWfLu#n6g9ke8LhJ(WO zak7ILu+&SA&DDAwyG^={2;bS#j%f%9b0Ca6B59&YLZM(#j}M$a)g0Yiajn`1roL1f z4aNvaBRJ1d|w<48F$%-PEJ%`QJ4L%>4Y3Mazd*Xr(IMG#K*B)AU&EQ(G zfRwGJ|Ee;(!@9q27K;k6knJZnnY+N^F36-nFUCVj)WbyJn=`iNJp9Oc<_c9X&L))+ zXr`^JGXuhS0pInsQIw?K;M_c}cx~aC+}wRiLCfwhy7JmL+)u4R#C1(Z1qIEk_*o!lcq^Lq&n` zZhNBJiCKQjCe4F9h{IgHmGq^JF&^^lS{eB)eRHG$#N_#zP z@=+YPlt{ADvd=pw``}Dic|3n~`YdG&nuz4n4P0|b`%`umv5i@PDqFTzp2cUU$M+8S z^@3xKX`V18>ORdNA#_eOESWd-0%OD6Qfxp+O5f^GgqSL^kxs=Y7-t?HcxZg@pzX^r zwR8#)wz?NR(Tn#I)1Y=(>PKwoV7jQpU5%p4g`o7fSsy{Y+g2lLM(+lgcgcFCeAnK~ zw&+tO^t-=&^z{~8^^CJSsOeYy7r%NNGsI!Sr{J|VU#Hn*7`B!Nwj&i!e@UQP?|C5K z<%*XAje%7p6anTJgdeCP)^~vb=}7om@|#SNJoSxG`8-)D(O+z5G8+GVx}^@9)8otH z!R%w0x~=?_>Qst!UuwVYZ{LuGg(14EfBxJRn`WQX{0pTMtt*RJm93TMFM^_? zDNzV8QAuGiu8_Wsm@w}2gReqvz8z#7>xcq5^%AW8@6ieqVuHDneJVD^vcZb$$l1n{ zD$Km0zzLoBI`;-7yvBimZFe@Gl7i4o6p=$E3LF_7=)5Y38j(^UpnMN6@r!L48pgYj zTOIPxpg5>L#}ZlblqEK1oO-wG&-{>!qQQOeB1$pXNs^*{=dN>UNBKe$EZ)fpFj$2Ia zt#n)9J21x~ly2))@O_lEU#O1kk(NnF*%J>|w9#V-4fe!QmKuRs3o~)yfu*D(3EyRN zr1(rKK4%X?M#{ConvhGyS49z#hC+(lMlCMwLlD3sjT1W}j1pS3$gBNpX?c(X?I84r z@ph2KK;M$@L*V_rKeD|B0WMk%uu?*1*)eZ_@k-DC_=ymBrM>E+Z|V67NB_Q3Kc164 z!s1i_JA@Odr~VB?$Pnwepz(IStX;DIV*Ka*;jLl!jTRR|V+LBtANX$D$5ivP|D_4w zO^Eyg^CyY@nKt(Q+cySd|JO(fN8Q+j4}e@W!uYmW_1j+n%1S;gLOk1xHi+e@uL?;2 zeH@-qqQCIMJ9E`8qXU%tSXU{UlE3-I>m<9l!RU6vy#}+ty;Xw%`v*{AE>jT4@8=kK z{HpF`E#CeDAo?d9M)}F=l*Io9^8dRj@ErCqvy4KhoxGzC9@g@+C7{^2#nGy;|L?T^ zzL~QK@4@;F0y}byo|+W)`4+E6FpvnBe9 z_P?<9KdK&o6)AmTe1K&1t%4dY?k!~M;v4DP|02-8K=40*gg^)5HDWof?eKwYo$UDl z=J++}EUGmL-<2|#a;)(8-j*0(4r^9sS3CzOa?*2vZLA2zT6Ow;WWoG1Pt zOq=xqz~zWX=KQVd9HGrWa2RB!4k2y^Y|B6=2=fEqULTkuvi2(qx3PUI`1IzYJRpRB zp%ip9KBycP0H&_Muqu%^(DnLC%D@5eU+~G;e5<&_v(EPy)85b2!Ng6^GV*}u@XDh6 zFO;?+15oPi5GXJ7=Au3zJpbTf8vO@7G+@d>C^#m+|7XhD&;WwhfD82Tza84;|JUab zm)M}t6qf_8PTVgG2;2TOn8%w4aCIOD$ob)K{|@T?kH6wEBI%(3ru^X((>TfhOt}pa zSR)JQ;K(0uhX%p@jl_l3H$G~s>H+>L4oXDef9%Hxgdgx%pwmRMcyBKX2J&|-jQ6m3 zs6v^UH;JHmmc;)|*&7d7pan$K&q!~FzQ_3M*nigb2((r808WPnAu{-_TYB}3paFng zfEV#+vAw-01js)@0Z4K@W})^Bh(zeDaN_?=8I&DZpjtdKQT(?u{ zP@s)XjP}2}uVCG$22mRw?lu{A^#_;^y^}z0?T0pz5;KPpYq?{Slxg0m1tfgFKxV! zQ*Yk`A;{mc-~?>+baas&$KNN03Y~Tr#|kf3mhJ4_Uj!QL?@54TsNa129pnQ0`cbq( z*!_{DU$>~^{b6HAcv;~LGOFTbWrCyn$VA48xuT++BVR2O>ErnOx0V3Br#8)3%cM?; zO#GK+g8sFxQ#$OAA3yHx*C*QVrw&wE9f;iD%v{(Xuc)Cqe!}{ki5m4q1XeVGnEdma z*RLcgeSH>xp#WJ-f7uEKfW<&qltPi5J=%qhdW$mJpKeQ7tS^%EN>+EhULP>HN@`Zmce z0w$wK_yJ8fHrCHleF5M#kf#|Cu&p0>o%lL-r>oiRFXk;8&}@J6b(F~MC#}in=?WG| zvvWtge?c-Bj-Tew589~$R``tY#BciaX&HtS)~EvK$wWM4QQ(I z2(jn%*4EZ7Oupy5c#%mHFy*2v8i-WQbUa_Lm@JOSgLdWf%syd9RA|s zU*eyV8~7zQ-}8m;a&zEwu@gx!aN25|0m6^{*0a1qc^Bww^bRilS?ui;eR2QJWYxzz z8p^GeQxFdNI3tR=LMFz(K2O?TJnChQA?l-oZE)R&vc@VdJy0yYN+Ov`EC5l;1C#mN zjeqw~38nqnJ}Xcf4ByOB@kPNznPaS&1At^U+Sq?#_J6G1nisGoD(gQ!Z(oNm$ZK}v ztc4l(+jpVy76Qr9@$^RWb#=r3ls+AXKPq&LpT+uVVLo1tgW~jP$cFnMWAX01Af$J; zYGm5Q4$C?RTwJaPR>-Ftrhfy(+<*la_o?Ob2lc)1{`!$Fi3(q5 zKVzk2+`llFTyGEAl%eWNv@-(+tT-yrTqS|3E&SIeJyk z&0aynhM7%wcG4{sCS)oV`ldQONjINxkUCtp+V{Bmce{RFpeF2nX+9OyaV^qW`vz#a z0q%3>iSS>$x>xtf8w|Klzp9O_`L|HkMfB=EPt-cwx9FKorrf+nTMs(P+j5gtF2oKN2<_jy15E(`m3=}3mRe7S6i6l?~# z6&~ZmZpvEYlXiOfd~+_*L^c6mg?EM8o(o>VyLFzeM1*sj-*Zp_B7-?8~a zt6Qk(_`E7~Iq3!;666Y^%+EwXuo#cneSP1LS1K5oYBs8en%Uf$!i1&ND=gg@&oxa} z8O~wupqMkeUtAE8S|%rOh<3vnhRJ*YGlB2QTepdt)#BL5Q+=0Uk&9AjveIfq4s@tj znaU1ePJJFt71=w%bjT$}hcFjtE7>_w6eg2UtMHRdZp_(_B^G&)J$A$zF^mlC)Xyhc zt8^B4*&O#_HCoX5TqY(Zhv`3ih)|et5F!iP9n0lP zP6!cr9;WAfGa1jy0eDws%5??y>I+6FK8N>q*%GCpC^zV1J>4HjD)hGV-^;~(QF&j~ zlIl_8{XE+!6%Cw|L1D9*Tl-FRYqZBwYvqicgv-U^dsKa7w79Nl)E`S}wAmoBSh@#) za#*EiD|-QC8AiRL=#3C5hJr_d{Jd;*FQpuy9gs03^d5p6%aiU#LlRWhW z+iT2g2f`d@Eo?*}6frrv^|)MkJc#<_;n}Z3$eFDxW&0={?6jucr&HUxdw6zWf4nb3 zF+~Vj%0^bI$lc|pVg6+lSa7{)-RP+bAOrX#)xv3+{cfn?@)X=9srRg2E_YzZe#qn1( z)FG#$iAPsKTjl4*z{3{*uD95emChW zpD#Q1lNnm(3VY-sO7lG=I+#_2du+>morr?zStO)Tp4FfcHU)9sqgbH!k&AZjltdueARH5a8*XzX~!(al13EJGmQZKOm#J9x*c zdItXeT=#r6_UII4xXWm#xpF**0bf(KbW6w?l!Gq@D%py_2N>W8;kD^@{|-4}>P!ii zH7?#(zfUB-!j5N?xTsx<&}aO7zZ;p&=?qt3n@y_Jh3eANG4arRT=^@A1Us)O73!47=%xnPeU%+57qMxU7pD zXWp0TlNKI>8~JWNh8n9dG8O1?%s|CF^$O>Rx^iez_llHnd>C9RLF{ zp0ptUlUO7niq5Ei(_F&YnMI@7b;>0auPX+J)f7TuYYO^fyFX7FnJ|;ZJl`jwP+QQ_ zvyiYntrsq;o%iQ$TAl6J1YWuZXAAZh+Y(0fw%h$8{%{x>K-1%B>&v59t<{R7rrC58 z`PKf?l8bxmk$RJJ(Ef}?R>ITdgw!~|>G=T?;>DW##!U}7nceLKCz-*7u0NWcG+Q{u zS2Bf7Kqoz&$^s84V0KM6oLs4;3Oe@lo2%r?mg0U2jU<(lv_i!D#%L-ZQmZ)d-w%AN z(HKnUH9TOzeZ1PhQk{JQF$f-%QmNF>nHI=tGDBeLfMA9jS z1#gpB1!Dj`=YP0<_V6$agXpJ>IP>xw2_vhMlxiZV60y6Oy|cZ;!Of&UBURy(Y>u$t#I?ma*zbGS)#yWP1;vPY*r2C=_>u@)4<6iS|< zTuG-bVx8%u;N3mv29$d{FRVSPbc&ne$!tORUvOCP*Qugoz-wV3f_<~BQbA3>=-_Vs zNl6A|VI;8V4YQ`ql%#`EeNgQB2|7U)<(nR5?HYi3f&CxQ16;zNR`4ZV&Nm&e2cjvJ z_Fmg&*9Ej#MkEsGevz9|utc2XCU+ULz|^Dhl{SrsOVWNtA$CY$n9Px&G=0?NXI!>H zr2N|Qw9THt<-wH9;)$C}<`Rs`ptBBrdD?liqbyCh_+$svSsJkX`AOvG!Zv)f)rh%+ z3@r}o1HdL|`Css6l49psAkoY@G&z?O^t2(CN*U~8dcK(h>c3GW0b0u33uY3YjTD)*!Bl15Wpb7czJCBX*tu$RRhJifQe5L zTzm%oQ8{q{lTdVTL7t*&{yr?;riK4LkKZ zF*nai7N|XsTadGb$I;k6|d(a_UX|H|FCkrhPm_GXu<36$bdW`Kg8bZ6dOTE!b+QqrSg*@NuEORVWa+B1! zJhS{h+M>PW38^_~077QVmD#(G**G4zdNkPmq1xPe!t&x3bViBwWX*)@jA;NE0R8Qu$o`kFXG{R4QbNu&D9O zxo%c48W>q_`GQ#4n7+LaUcJ;4$)hx`WzLeWdHR;FMebahHT!d9*bC=NYe6JZJ8g*= zE&}inmuU5sxk>=b;eqG}X$4sSxfoLjIwu|V| zr{gx&;}w9Nsn8~n0nkH}8DZ^7V5jZ1wI9i7A@C8@I^H-v_LVJBqP#h=U{C48spT_y znr_`2@fyiTlcsUr(Fvur8w}r}KsyWK8%lugfmW2|lqI3&)T)PR_nW0ixnB_f;WUlZ zh&v)9tJyr$=zz9mVxBX1F=I0SI6-vH*CIMo{}rfM+2raIbx0-WjgRZ^O76;$THM+= zQa7iey{KG1F>8&p2sv;v%I}!l?cO)oCG)yydAOp%(>}h3dpz!>55BR|Kon18Q@GTO zPb;0PdeXXTX>fh2frZj!(K5WUIJ<12D-RyJQCcBLG*VqTuzVnerq{YU(%P4Ohj{yN z4u{krmNUGjafi~&)_}L4_RwyZf=H>La`{lF?DGYP%T)wMD#KIdn%rcw#RU!SJQmlo zg~;SwdntIkkZ#WlJ@)U%Y=ROw}pm>pHT{zaLbj5o*`|*k8M2wm_ zC-Sq{w?4Ov?NXE8CG8Fv-GlHHlbhp}SAz1%W&qzab_x~3B1c-dpNU5=K#-ghjEtxs zJ_^9fG`l)9tsEQo|ADWcGj=e&N|k>yKTJVTSe_fZOgsUpA7f{V~n}7#SPBe1WxKnkGVZ8~A^6*Y|@ni@{hoy$UJg6;}L(e>eEf?$3bxlyes(#if#{ z@v}xl6;(IXz0(-(hp{k%B^vgY5Vq1=Ah{;g1n^VQvp@3fcu5MW$ZloHlaI^3e~uk} zFY@a#li_>GB9~CUm}b`UK(iP8`-YaWXe)r>rX(p&{l#{IE1_!DXbaM)8L9m_VcPv? zgKb$WYSAw9R-ck#ekTC=Sy-QN;$kPcqLMde>%3R<6v>ALgI?KEzCyd_Q}MRnSe}>; z>nmo17)zyvPJ(pe*s2ja|Ds;c1LOyq7 z*;wR*KEwuSoSD^+^bFdHGZbyD)zP?#P|-9Id*u5yx^pD^y?1zQO5IJ(#8@P0cRuWT z9J83k)I-z2=+bw-9^+#$+(xo|z^Ovb)G93rm6_&vBwxWx`LmMMz56G);u;Y4)%sN2 z=Vj3Y$pbQC<;nG(n5%C*B0**u7fXHoSi5sIErO|%XgYdBj?`Bt->Q)`W6{VWw$?~y z2eMSnd4;d%rZgX3`#xcL{!Bch_1>c_$a2wE{MljIH4*4wyVqCd%>FaAQ?#&q4icW} zs*pMUm_pMX9CFos@d*b$KztFX;=i_fA!gLoOGh6~TxAP|JBFw-)0o9+Ai|M%nQaWL zHrKlE`s`Jasphd*s-ZlKPalnyh@Lu>KgeV#aNP);*hj@?`Ns zel^@d8@i?yYE?k}%afqf`)1eA#bh6&RWKfIHN}4;VU&wWF;p9OM6+qFN$UjlPjXNW ze6iRZUE}jEU2o8{=bl@cKd64sc=G<8U;Bj)QP!}MW;9YXF50cgYp~OA`syNAqUvP@-L3g!5X0nXM z7=QqcGvxviUZPf7LyurA9DszApC_C|8iv;uwF|)!*V2{Dad%s}fB8X*tG((o(pXfV zoJM5vN?ib*L4V#b9=l^w{Ur3b&9W+_4S8DDkH~2?>&-Y_0_C_6yQPeP!Db9gKn7|6q|-ak5Svh zPlHFzK&mZcM(adGqw!LDu7`o;JXVV;H=;*M{)X$~a6&!8Y0}gD<#4wAHxz>N#OJuG z_?ZnU`Scd6rem2qf+ZG+9j;wF&6A0VEf+y7Y%8rELR5QxD5OthzDw_R4IAtaz9HaD zJN1mIR2t$nGrJ}=Ztf>dU2t*rQkF%1kF;)Hg*Xc9L6qtTNo~1ZWMn^R~`EbZX{kn zwcc1(`1B`l>iEsFpM++OBeCEjEM?m`4FiS9E%9XVAWoJ5zGUjRH=jstZk1%lX{y z$MJ>_$15_@7~EFzbU)v0nGp?N9L>tzGb+v|WT1fq<(RF{HonW4H__)!6E}oE37cs7 zE!jQuP={mv5mW23sNCpr^$jfTrFVGB&IvUVq7Gd&ebc0We9PsDYd`W^Uyf3r8=pY4 zBp`z!WZ|+~YnZQHuui*>Or~SqGWrZt)=dEi(>jpTmMPXCEJiadU+RQIyL0=jzbw*5HcyJUJ{MB^i>7r#Yxj0zKi*P2t7Op#!TyBKECt)? z3hSXDt#je;7;XSDHSRbocTVW{5ix}pyQxO!JXoyQzb+hNeo)r=K83E@^1MQ1VBA3q zMyAI|q&S^UJ&_~I``HCjeC~byWWgto2=gcY*DWxu%uk*(nPdcLY2?=iEG7%h9eI!x zcBhp2D$nQ=&H9_-KgsO1vH`eU?%($`PMW=-5U_ZzPFzvVh}&-gGJL_9qR?au6}|E~M%ISrYaF08U)9i}$mI&6@dF9czVB$C=5f1i z7qO`~>HC~R%s2!h1l((C)t(-DWgDnP<9e_sauyH~R784UQ7#a9D4X2UQ6g~$^$^3A z>ehF7K!}erL&Bk_(JwN|`Rt0UaqHcGNnmzr5kslB-O3o?aI~rvqJrp^ZsO(G%A{(z zyLdR}oGdnza)9)Bp8lg_sgzMy&)82MIx(EwVE3}(=D8{n*08Ky>iCs~*{eM_iXvLC zI*BWyxY0)WyAnuS=aReTQZ=B5wuJeOHD?^BmxfArP)8w<931*8_myj2j)rb9jy92s z&L8deuzEHAJD^CGx{UW!GanH_TL4?JHnPgwX?$>_rXb1x11Wv}P~;>;ThjLhnI(Iz z^|e=aDfO9y8(_PUf6PE+Lxf3LvwxJxSF4S&n+l6Z7lZ;@Ln+4_PAhG$_7zCK%~cr5 zopk95MX;~L-YQBYT*`!oLOXh3=p+TuX~Lxh0UHv^PlSpDyC-n)`mf{zE1b#b3$x)a z5Zb-_Xcr4XMqG@o1lI(scV|nqG2u#7U!QD$O@QF-t_awPe`9{-Lr(BONqukxj=ID; z+v~6w$olq@qKE_#MSnpMe4B|ic6ZEDQB>ZvXux;$>8MD~@L2(>pu2ijJboWIDaRV^ z&58O)SD=Z`q{gusoqqo+dWV!f{r*~)2|UTP+k46yq+2Ezr6{YZ@aK2mT9@Jq`S0X1 ze4QO8q%YF=><`e{gHu-kM=}rgDd>&aO;$$YSiihSDKlgTw-EJsA-@tE0_N$tnPwxd zkKp=svi0>W2d|!yg`JH4tOW}Xrw{0UgaS?)<*obCNmY~yRuzv9*j8jtPWygveu!6g z>4|Inj9U#cg69!dvbqK5niWZK{uCjF@ADH*<#6g$FqUv_?^&Fq$pDSM0y|^)LqFjS$1D z(R|-k5T2sI$liA7rz>HN{&5Br!jGG48bI8C6wa==+XdIW1L2QEw{ls%0bi%*p@r>4 zg3#QNQ}HS4?&?0YA_IHyI7MsK!WHa0{z^e#tjg+%|sD-+rxHZnXk^2jW@5U~X~qxlbGV*#QcCo!&?Z@k0Kc!| z+>qc{DbSdxG|%{yu~OMHUb+uYS2yv~TW<4~z+q?WhZecm^7ro?YWwkWNDEdheC~%k zmFpijwyE?c-3g3DQxkx5r2J*KHgL+%f+LIjbkHEtxcvaFzu(J~XXx_%rdn=hdvMTK zm|zEC~P8O2K4sYC8$NvmcoM0;+cBWAn#Moh)4Cs#AB1q*EXv|$N? zsaWIodCp6qS9p?^hBj=I4W-OnrL@U4LQTnKpP}Lks3Z17z1Pgxi2~r;d;i-+zr1Tv zBr2^z&1wARAMPSy)(?p+;i{{k^Xb{_dr)b-FG?O?$eWNZ}%jm$_PN6ivimifDW(n!t?{Cimj1KU={U8lc*_T^rWQ+&?5 z&5dEZ)lXInJvv=vY9(JJQfa$ghAtPyM}nV$z%!lfRWpr&Pp!s%gC=TKW3Yblh=($FB?*G2cbSi84n~goEnT@8sMf%3dkXm(8|aeO2~T_QoA{v6U!6~cf@7^ z^v<{C8}=WY!}vGLEsvn8MajNQmhU@tbe+lXmAkD#V>GeKN$FXy`F0PZ(X!fZrV&{o zX8m9trQglamRCRTj;*q8|ETbl%(i{S%2oN{{RSZrME4A>SUfnE(k{)fP$X6#C>3Br zKX04#I$Q6JCW)$h!*vSVz{;Q z$(6HFvRwMfkTnRkz?Zw5uA3tXACP&x(G#Au+eEr5&8P-#2Z&ur8c=@#pS_`pI27+5 z_EAx%Y};hJi^G0@J&4IY{)%s>*^AhuZRV6R^7y!B$w>kLv*CO30Prp+kS%CkjbKW`?DFz0@P7oZ|pzvKYaqsf&Tw}O({K` zD*PqEVz~fLvJxJtj8x`IjWNy;GKi;}{j%r+jzSDNNg!#EV9{Y3r!vTD8K&lg_6?JI z-VUpZd8z%5JA)^(LG8>WZiC%}IzTaIMi8Wf_a?wgT|6hYfuQ1HP`$1isU z)w+I0uM^gJv^|yELD|DMw_JgT(x3KSc{o<(Yx*FeHdoJ!_H65U_n)}e2fV3wr)5Fe zW<0S@dkUk6cDePZ2>*V;Eyt`70iOw?9*n;J%}%`S@$#%J>D@>#+_R9D`7J-5s^8lE z#S^1V_z->Z!H!9YO~iFO*}Kf%g1)cvNm%qx%-k7MmEO`@KcG;WI4io6l$Ic%<#P*0wOh=ISSH%^gT(U|noPV~X3??~P?2~h4 zJ;C?kNw9k;Agp&dK)*V^f;!S`!1+^%H%}gJ>d@xpIolA{@^tOS*0vm)c1g<#2&he$ zR^{?H`4U1>N-|r`t!Cl+?ihp^mgc<*sGVgYU40!s!qEDX&3$v!I-sTz9o>%Tm&|?R z$zcQQQSKZ>u>lY{Maybpu-q?|7s+dsuA_M8;vIR__lZsBT2Uu|7pHol(qJdgMyBcj zuhCrUk?ha@WfhUO&zR!0oa;1ro(`f?cT4XfVj=NaYh;--%6H*2D1kO4?}ng6Qf@IU zle%=UIn&{xA!IZ9g!L*?09)&BOK=r|GT*zTenU{oXt+w~ z5_VeJz3I%t-$+a13pZEKxI67S@X3Gl-r2wb0ZdKIo(-WiiEfc9>!{b00W=QrJ!`Y= zlFRzRBZoz~YWfO}-=s4j64)l=V^W$%=w7m4DQS=rFL)w#fBQkTX&27nmTw4~VZAv0 zKGF_O^Ttxcjr^Xbw;(oJvVc^pcP)6UaM$k!Zv=N8vuP|MI@zhaYheOYev2lR8y+R! zMPPW+jAzZ{^HeH0}v2 zai@2MEiPEAC^DYbtiY~Gm6vWpb;Zn(vy2V0Ft&(R0-z(Epe&xJ=;q)6B-Ge{>k%wI zcvyTL;i%bY3`FC^VYbXTxoy1tA{SF_F*E;#@5t+ANm1a$AKdzSqp_enm6lugcA?6k zQjdzmVSbbB%%>~^k=9Byh9W(5ZL5Dt&EM2B77S2P3xD?)3Xgw$pZ#wZcHt;%fSq1C zV6$nR&_o*xvBY09O}?875D72opZboe{~QGf6J6yZ-fKDwFxBI)lIF(iQuJ5p|Xnj65RVX?2RArPncym-GaP zdD*`8suNWP-8%+v4oBWzkn`1+?cPnFjz$wfZq~F3ICUH3gbbdH#Ke5J{ zQN?o6+wgjI$~D}?U5U;G)13}(%+_r>Y_mpxEc}25;K64@&bu-pBFQW*y%CRZObUV~wcFO;A zmCFJbio5bzx%d>nm-m+2Z3mP@VC?(a$DJfzIxueEkHNZpD9C+;!iZq7dEfeYQDnY> zf`az({v;F~=9TXHl13=_&35=~bzDn}n)7n_==f-97_U(%I->Ri+Ymb^y@Y~OG-*3* zV~hue+KtX|;|R*)F%Q_?Gt|Afn`z-w93a;=V}TS2ucXe#)w_TTp4HDUuoOIcq8Ivg zTFPR>a8rP90;m9kl3OX-i6LOudTL6AIxi3kT++yxlR7+6i}rcZ-U91Njelr?hnA{} zPhSSLPX0j~M&169aWNWA5w!FfKeQL8WvOskqnpLpeqjDararQ%KXwH#P8?LP*Y#N| zWNGRb7gg)?2bdh%T58C5En%l9@LR;be~!1YhLH#FQ~N6q$}0$|#%o7-5GQxfy|~;DdG8SD$w%*8Ov^^LQRD`w`m8)ycuQk3Y4OY#rliO z&KvH$xv(7DR-6%%rRNL8XoKa)h^Zon!#K|c56DM>)&7{F1=T|QZFf2`NZ)CTQBkfU zVdY->owb%es#7n{Z9kiRn)%>p{FJWE?-zhz2nUAJbISg?{h)rB_mEt!$7T$?XWLb% z{b0X8QO|E<5|$kclG;83TH05#;b1;5!8X;S7Cn?w^|Ksd-0Nv;)mq2qehi>SgKqtK zIEC?tl3S6r-KT8WZUX#6`I1KntphQ9@K&ywv>;Up5N0YIrjqn3lcliP2HXiux?c!H zG~ztsh%FB~5Ejq6aGa;BPyNz41Kp+DM}kGt3$d$Of{=4~F|D$9XSvZtkcDw&34Om0mmW&#Bwg8l z=(${MW#=??d=pE10^Qnu2s*0c;{Nl&7)QLDS`k-g>lZWa1Ry%Y(VK%Z{unbmFyH*Z zoRWu<4Hl7!^gtPOrSTY|lwGwmMUMPHk1d?ayrQL?J(;Z3bVs?}_^R<{n0h+pm2^vW zKR`(|&dMm*^a%kvm?MWb z83c84!$VGAZRItX<91#CUVh{3{oz1jm{5)OpKG>i-8Kf?HUz1s5-I|_Q;Vic{u#pY z6pRNmWuNO|3CINM&UUv_1yYEnD}d?|Mp|>m%^{^9YGuk=VO3)FH)bU$kz=P%KH*u+ ziaZ5T*j&zy8z(~YL?nOqMT(`1g?!p`bev+( z@k-*gas9ip;Ugd~cz?qwDh{eO52!AI_@TnfrF30}tUTAlLMYKJLr~=q1}>HP8tI$S z9$Y(0iR(oT@9a5!Z9McH`y@?b(|2;zlIF2p{rR%-!xeA7MM+jC?N@8|DTg|UIQ{7>w6xB z6L${>1J=?{-4W5e$dun(;?8_WKCZ2!l=Kr?SNc11IJP(c7#sc_=OG4}yRFQer$p=t z;cGGolv`OdO3SKtB!h`E%B>ngQn^tmhMIUYO%M@;BA)IbLBfP0#ewDzBz6RER21<9 z@SsfQ>BtRi!LGybywlv6+m~;!H!(BtRcTp9B&MF1Z8Y>i^8)2soGH>M>4D0jeg-|X z-QvJOv?tuk9^h8;T<9$EmkGmmm=w1fbXUKuKUl#up4pYrW36eIo%%Mo-1EiK>Q!5< zX$hl2@q9_++%nZ_3fw{Djy%EE7 zd@`G7dQYNODiFN=4&&0Ys>Q)hO` z8>P`UU#kHpck3F1{_}&1;%H328}&WR(Bv(f;CK|46#!*AZ52wz$X!TDG?VFuG9I2Q z-#^$?U#Lq4FUd-Ydf`sqeEg0!S!LM2|EizqE=G;$=*6bpTu^&90-tZFDNgvl#f<%v zFCrxJ6hnJHiLtA6C_F;{8HgTssl5Q`T2rzwS26{C!7jP$`rVM$TCX9Fp=3IyKUB5Z z;daY6*LC945rr0x0}PRc={l{D$9t}+Ku3Ieo;8~-Ou)cYNhllS01#Sg z7A}0_vj`OFu5H4aj5J*IbP$Zq@om4YPg0otn(zs1H`HTu#gjXe*C1oqnjR6Gb884N zmw$ou*v$)H@dxLR`_}7^EASA0QdYZ~MUDqN;~K8LCgI)%A1M6=NTRifBmVvE$X&^d z^#m(Drvz8z?yHZ%I?vm)bhdL?YAg|SRXPb8oZ6}UOLpZ=Hi^FBNdx)Zfd4qRMH}R& zL0XsLW)_L;9Okn4Q{#AMzv1UsCaec4+=sitj|Yl8-XQlF-%ZX*HKF5M$Dv&orB18g z$Hz}^)Vf77r8knn(_T=oK;@%FE+&@nMzF#C#T=h8(H8km1xNxa6K^rfArt7WNXr48 zzc66wcPm9dNqM%lQ<>;Q3bpUB9m~1r`qF?3kyT{|Q4ylLi{ zIlj&nhl1c9h_Kiigc`pXL3nd)P<_7TH<7;DhMoi6a7eaqJFT7%VSs5AXgzwM!jLw! zZuaX@8_v>}c!X*uHBLil8=1TKaLka>p6m7StR(5=HTG;lfM$z!^7a0jxbSf##q4XL z@S{($N(qgNP=3368sm=^n`+X%h$D0YR>K`-9AT{I`Thvvibw{Hx?r5v-J*{Vk>+~M z){v8>(*+zEA*T^#+0Bj)s0u7?d0{F~_Q;d=_Ljw)D}-}|J`lG;8tc>ZrjP1Hd}9HM zj9~&`XE?sFhIqMxhfiEu21|~n#2;3Gp~;^~5kJ~o?{5YZpIs@9@9Ertz+i^-0Kv%; z6Vlc%&bS}%1B9eU)_QhYf$>(YS6!ot*yyUBKl;45HE{_y=Te;r3)ee75Df`8EH5_L zVF4^Pb&>9`l^;EQk%@3$`DLzI&HqxYGIZ;w_At)L9U`Xkx4-?fYc&i?|Qp?c&D2B7eP28pwh`) zr7Y?;pOJ5;140;KG74BXJVuI6DbjCG+aE+4KP-;1pgS^~${kk|qWz$1^8&b3-x92Z zo*+u$#TPrn5>fmYmB{lE^Ka7Mskeu%-UmDpq~0?w4$G8!{VlNLxYTB1r<8Fa7Yd78 zN%NLJ_^VD*=G?PsL(3(ALgDEC!oEsvpR?MdOhFZ}zE%&CRV>IVubUsPuODQ0O_bEh z?MCVH@7Ec^@(^s*OEyuVNcaEQqwL+Qrf^ac;R`PjiOz=i**!|zW_0oQhx6A$OJY2k z*F5PWpq(xiry(;yF0LOoLf}jEv-zcP1#dAeiB95}bFf)(F+89Y?|dn)tjEpGmzGFN z1BA&;U^#+Z6(M+oif`I_dZKEyi#bRH*=5aC$AUx$A9q{aaZ;eS33BuUlid2l{`D4IF}?{ zWq8YBZdhy+l`AV~7d_Vx7WOx)1qGXc%=+Pg}W?8rCG}E8PmHa2ALc7(PbV^WSWqj?RnI z*F6@Y-5#EC&z5XxJ{ieTKUDqYGw6u;B|Yco8r6T|aoElU`rfBct0n5_FG4VyBBhXRE!u$a4K*?zO0x@luPEmW2bsqAvbN79Ft#K#WQBf=G(( z`M$9_^Q{|7IMh*}e-Gj6-L)ag$iYHT4kT;q;OhogKRn~1$%~6# zDfF27bWSI{Gd#vJwk%**`*t@lQFdtY+v^uX>hFcj z0-5rST=~wxVb_6;eu}aOriXVX;TFQl7q4M!=_l9CvJt5bi97$V!FA(mefVF zBQbG6zC$#ioO@OT%daEeV*P43qd%@fho+9%Q04VLf@+dassEoGKWm59! zBGW2Xe8RI`KF6tqgJ7MIy{L=NxZ4cJ>sYu&X26U~4NLFMQQ-){;xDIWY+qgc_H#Y% zVmM)aZC5}d9_%z@kzscLh&2J)$l;XT_F*-RLsAXkD0aZsK-+=%VRZ5a_wllwHBywbKUAqoRSCTqAUVBegyk88Gm?9 z1PTMYEk^P9xf*iB2`OgFI}fM%Xw(BXgpg6P86fNlkE?*NZvw)8eG<_5?Q+DKZ z4zwQ5<3W=RJFT8~tet^!@957k65Wm(6s{~Inj8b8y3^2>4}`B!q#GtRnvU4ahuP-V zb*U-q5f~$-UjTYqW4gbAXiz&}c)DkCHE@KR9K`KkogXzGC<9~L9A52c86tq!)i?wFm^0jBj zu6Jx7V|`OFEo-1*D1=g8++6LQ-TwF0p_}jZ8tBj`f>#s%tDz2jy4j!XEFSkN)`fA` z97$)ld9V3)H|0!+w#`UbBD&VO2Xr+T zLo*Z?>a|S$(UvSd#&s!xp=Xk7&%OtrPMyK;pj{<(>RZcGU%0R>pb22i{M+4Jp6$YQ zN-W7~(8+F+Y|^n|60$H;}>X~`|D|GCG( z2YYj&Id--1a8lqmVQJjmM!sU-mu_FI>xZ1P+U8w9J)0h~hMt=4uOCFDF`BbAL>ljQ z!%lA}39&d!1Yn89gcWGwT9LF7R8G&TkcUv-Z}#n5(YjqUv`#-YGU~LW?V$QYp&&Th zZ6vjLQ^sUiB(S_<5n6LtCS-F^Q3?^|adme5IGfuL*NGJmA=SR2w^Orq0r2%!hY8d) z$$aOQmbTwr?KfHPrZbdZnWaXZhHo`2W6f+v!4AD+ylY*-t)0%WZ~$h1-?#K8bT&qS zpQUWPYvEF^w)}za=d{wR}BB9#@7kmt{XC}qK_DC-hJ8E?USh9pggJAPy&I?BtpD(;wTq^9>EhugzYHs zACLVwzz=pPIDyYeVNS19oh6ywsAb!)C*b0KjY|bXmFUuloB2}Tqd!tl-R|XQa#qBX z_tS%X>%CJYehDO24S`2of9?F}CVMlCslzk~T4?Vx9TL3h}3A>i_s zKJJJEEqKkZi#y@f5=vzBf?(K4>z=-vj_2Htr}0T#A97Y3Xm!Xa?2Memaye=~9xVKx z_kM~HDdqQqPx%Sy?n&9evZF0l^-^8oYJgvCF>0N|-^z#PVhn;Axd@~nZXb-L-d$+% z5@;%##0|jT9ak>dwx8@h-L0szR6WRESW_?a5bd<8%cc(7ER^aBH(nV5eFnllZDc=foL{qE@{$7$9|VRNCX(5J(* zm`uA9DE6Od9}-V|%aBsUFMEZ6y*2)Hb^pjcLH(rim|eCy)pf1$tH7ezMPo?0=r34W zv|3obciFhdgVRRye5)4I{arzZ3eFS4OA^NYV|!f6@$-sST%$9Q-c2D4%;-^{hk%I7_tDBdE9fXP=I66uS6$X0yl z)FH=9Yq{$k za}U3jmiUP;aft4El7?p*b_>k6;Z8OSh)&5}(B?ckJ`9K3_~0ohS<<(R@V-4ih=6Vh z?Pj!P`JFw!d-QXhLrTVgXdbE8N+_{!S(fJWPX;X!N-$v=+5F0}DJvfRSL2u7*SIs} z0N4ZQ=ev(r!#!HPCgiaCotQaL8OFl~P9?|xtgG`Ke>zk3IJwsNS~IUyr@vDk(-0~f z+W+@PytF5AB2uaUWZT_uLglmwg#4rXcvRZ7=E9E+KN~NN-B61E#K$J2EOUeP^8^nx zei`!^4cH!n`JZX-)?k_?ZgqrQz{DO5}Zm z3nU?0=CjzI&L2qWD!2l(cn3iv>iEuZx^s*I3|v%*pP%OqqxLMV+l8KLb>PUqZ(x>q z)IyffF$;e=4dd>$UEEHxjVmjO3_9UIpNTJ{^o;u~cSDT}C0}Jp_@jisyWC~S_24${ zZ@pbP+_@QHC*mKP#e2bI zNIcc#LF)d^iq>OYUW!~Rlt}{kCKbEX6P%C|h?tgF9*2&InHukaAug;@e?6SwlUA)| zIrP%fwCkeFMzebTm;>yb=it0g!}f55^%LM4w~-zLarzrKPYcX(IC_*d^NHAKV(}RQ zj)R5`jH-;}LSiqo?xUYW-&8Szqb zGHdRDIBiTLynTolrGlQaBR4?Cl3SqH&RMj1n@bdEgL+{t;gMQ6U4(Ylz*#{aal<9MK@k>tM_;PpW`3ue`paY4^4 z?ui)rAph~-r&(1F?Mk!4lPphV_bkSy=udl6i)Y8WD{((G?0nYZ zedGBYh)DUtDM4&iN#3e`|?Kev{3%GbDMpDm528Pu=ch0IQ!_X>LSg%GNdU&U^=>sB9?*V!h1Ae_=J~oS@ zLsHRgsolH~|3h`FTb25F8WKWZ)^lo*^iOjMe9K~?2N2o1C;-?Uxd-a9_XBVmdrG;ks5=s}{5S=g21|Qqs7e)&%N6GW9q}wrYV@v7D-3uZhDIDbA_? zge|GD-&q?eyC(|bUA7Staj3d`z?SLMjPY6%pkV~#Ng@YR=aFCB9<%whJ@s)|lW^P% z&cL`(EsZu{0tr#1 zAZr`~KJ_HuXQ=aU-&kUbWk!O^l$x^?O-0u0zU@4_|J8!fON&mKtZ*sJXX5l|ejgJm3ypSb$_$X! zahDSiMchv)wlXo_7Qz- z%xFu`5MEjXVkTDC@xQM+(J6B z6B+8a7OzBxVw-hJ^}i~$)$V@oRLW~{LiYr8)~8R8&?xq`9sS&KwC?dDzROAb1A}1) zj-vQznO8nh=4G~l8`x}zqz3I9iR7*EI-l1__YvD(!y&&@RwdG>;xIlj_iZ<$v7po_ zg5knlvKeEY+dU3~ftB_07*ac6_bdPHR{d^8hZ{k_ZaQ8(hvYSq7p&jIb%URRUsMN0b9IUQ+zt?z9{gYIof`h(OTQY2r`;m0o=O9sAd z=U7@|cO8)8B{5zgzxy1>dbhv@V)zvy^h{$PjTS^q6IcapJi4W-YeK>dL{CtOLwUA=1f{;@iGHLmOf=9bXrf2OGAam641pV@T2q)9xXv6w&{NZjjt+q|?n7~$l ztq;9{T&xtTlxpG@!}sU<7-D;K<0;_SW#SC9I!PnjV}(7imaZn5)is6aH#zysX3eQ%3eg^y<2zJ#hPu2#MxpAa5TbzKst zI)2sGy=%(RPJe~hWxY2YUYT9OL1=niT=fBeTG8tHWM}*IG~+?8WR|F4Tt{Wl&U)D= z`5>kAa@b}W33fVh2?-9VkB--s*;II6w_canuNq78u%h02b0Mm|!Iu>kp+71^{&^Ww z`i)=Gej<4?6G(9T4`Xd)>^neVP5)i0Wi}d#@~(pJY$rpNK`-;==E;QEy-W?=e5N7m zR}?A$S@U9ZrM;2yCADtg?~;W3yxtX9bfF|CkNF&EQBcwTEIumU+c;I)kTf8<4uM=s zcuz;Xxe2SGAgV&MzeElo=HGN%sXCF#_z}f5A4dudT;VKsRL@;{g?jig# zXLhKjHCyh*X_px)M>CW)GAmAerEoPDdX(@&M890;ef^6St@AqMB+8D1r~_jnTWm?o zx67?Xt?>e@l$lYi(SDbrM-%c;0orRmZBr``w#^ED4GpIU&=EM`uOHSMLaz3K5fg;x z>}x~CqJb9xWKHN%S|47>??IIRTEgb35@p;+XjuHaSeR=yRI`+?Pp?TBu6&*4!i?ZE zq?>TxRtAy3?14{}M7j71BYu4r&Xg3o$Gn?#N)BSGjbbR76C|?_Ip5?i^HZbTK|c9- z%*%1-`Uu7>?pV4qnJwmE-&l$M?Iq6Ek?Xi0W3B?PsSF>xNgd#l29O=KXLCWjwO959-s%tPu|095vDDwz}o|cz>T2^Dg zv6e_H|H0Yfx-uCmbTbRUt7%bJwO`4pK8KFt`6bQEJBoI~RuQ5x54YeWjP+VNGZ<%X z=cPPnD%7-37R)d$vs)(q79U;f^PRu<(b`dWUX!?gN&>47;dkGB%psy46K0d{H= zbeRxm`p$Kt_qbilOPHMeN`Yk3m*qN(vxBH%E*w>B>XxGp8H{B(vrbCxIImxnhz(4> zejbh)CP?(;wUC?vF-^RWz%(*ZV+;+Qpr^SIlQ(nhux%YSeJz!9S+}i?G~I5X;j`Lo zYEDM^R|b7NC~-d|E#ruL8QW`ZmW15mWpLB8O5=m+qL0z1x=>^HDbT(clq{)Ar#i!Y z^$UF*1&T)?4py>2{^yYIHDPT#*lC`g5^n~)uRH6$n}l>+GcxMnPB@Nj5dCeK$N>dw z;1)M^^FcbtYTQZhvu!7gZ;bo(yHdJK{xLQ~MKXcqEB)(;`m4`aOZDXPKu-O1sX?1` zkr2pgnN=oV{JNdfh$XchVSLZ6{{YMR#*8xSiC_JOxYbuSz4bau-GhLIU_PV=^tbmX z3@wS#K+lS!Pene0+#0nKdjupmh&fRaxS6dMrIQ6N4cVl^t!VUCT@A?uo_h?fccBMM zUMKV4scJ(LJy@QL4vh!BRvOVr=3Xt6z%^gIa$^fwx;Z^6hd+@l|K3QI(U8{C7@L99 zEB_{WNHcAW^nHdbpZkpZjYg~TX&3 zPS9%07J&iFH;aY7&2qc6xqb~w?8%1&u#}iYt*VZo=u}(}gHumdnr)d+&ky9aQ4t1U z1D|}J{rADGZTA&q!m^NRAmdfNZK&-QKY z@zjo#*5vJB{ramUX8)$)k`*Mjy;kJDC@W3H-7%)#&()5D_5>UkF!h_Z>%YEE6L4bZ zOa2f%P}P7w?$BoqfU&X=E2}W46Hp8>^gvllI-Wcs6zzBem{JA*UO6m$-#<7G8Ia5G5dUefyQu@$u{l{h(pR*2n+c zi>dobJwdHWE2sev2h8u|GaCHfuxWs8I{DO=sC@<8JAWUr;B1L-uTz_lp#Jd38Zrf- zslT5ym?m&3Bd2FUY>JEDl3d@?8V|WWOXN*+aRK?Iu52cy18CeL$#!kWTf>C~o22Pq z%jp+??4ml7w$XLX&9$o6*1g91{!no~txE#=+Sm9FG!LyO`-lr8<}MI+A;}c6ZkWGG}R#_@h7M7Qiga!t-!#6IrDlA5KPV78}bT z6K1=mkodO8eIX79Z9PI`=8p@(9fRXFHpao!r1v)-Q8@U7`E?3Vj#-KKp4}wdW6;)g zwH+(5&KB!(q!U1pFwi3L*4Wdk%yGgkw0bz`nK)e^4op7m^?G?a6J&l~z>o-qM*4su z#}8dZYIMI5a;e$2fj5m5tfRCd@pBLceivhxAKS z!fEa{k(?-fjT1?!Xvc^egjvEv`n-VY)C5T`By@UYHmKq@J6NDr0;li$22mEN8kKvKlQkFR?vzL7-Z9TPuxzL zQ{Jssk}c4xc62mys-|6mULtXGBv5pq$yOA<9W&ysqu$CLamr;Nv_?9uY1`gW=~iYh z2;Tk-+IdvrAn6>EEft*di;s#@qsdjR?~sZ9y!Iy!j;c4nR4L>#KpCY<(Et@%(ZSK< zK`GuVuPSV|0um-ohr7?&F8)T){IjFfL}{($2}ae2l;3rNUs~S0i^=^|P+-5jnLnx- zW-x5X`@t$InI+;FXb770liM|zmN~ObqNjiB)kfBbVposS0wZ*(R4`WQnRa-|oXh`o zr8HAzh~PIh7t4P>KMio78tskDE@nc~V;YFH8VxwS9?!M6Pjxc@X4>tw6KBIny1<z9E;a}9OWd(-9KyhvIw5I{?pIYP zWTRS~IgC2Gs!KqAekbi}5?htm+pMgs!);^>RHo+gYeTGg?0idn=)>?5C-h==vMVYWWLi+y_<3QTXCw%;jMTittuj7`%)kD7dW zP`_x0_Tgm41@qJg^R!J)&#Q5ERE21Dcr=-7d$*iJK&iD(Ga5PvGu*{F#3ti=7P1{1 z^QCU{u%eN}OP5QnZYwVxq^{!mttD6tbRUqWmkAd0a0{tAoxwYg1m^z+Nld0+o9uJh zH_mJl0Vf4~p*1QbFOm`u>w4Iso{=bvka4dsi17LA`Uey4#mEf}_i6s4-8iU=8r-0_ zQ6(rXzYtCba*o{5PX|9(I?^O^g{8c>+uU893%9ic>2L+=o`gxo`U*Hg_$>DROP`Lm zws3M@IfEznzx<|+Mb#_Z2F;csJ0$yWGPtKMy>QOs-(7H*)qRVEZYj#GT4SdXE)$nR z9-!aj8*564NhnNGi1Cl*-l(8slh`^q+)WwfEeAck1+}~RZe7pj3y+IvxLysgG>!ju80~1=^9o;rc%Jq%*N=DBGzW*Vp=`_1X zAip)JZ@9bYtEb7h`$JIkdMSE{`3{4J%b?j~`0A@(V22HtDr>5Kj)Wv9|4OeHjmwD^ zR=nr-?5?9w%TNh)wb5|#J^3<-hrw1OpiZ~N^$Q$?L9;d($8pzhK}XdS3IjH!0YibgWoR3etYN(US9i;&?UO)9+A>#HD+)pTv7iNX7ka zISI5Qxuv3R20q1W?n=F}LzR9j>m*+@qQBhtp()V9d76Hd^x__U9nRCc>ycFX^7y&i z|2#QYMzn(#I?Z*q+lK22+^;fuqD+|j0im3$ZNW{Rw*9w^FMUa_;gM5JY#a^|EI&S) zUyf1d0&;2a{@tqPEO*ah2cOg@!~ketKBEz0@ zMp7~Wt(I;=+ht;d&9r&%uY+y%@>DqM2rC%`ew0^B*Tj8CDB2i8cW)29^hhY< zry6Olf=FyEP>PEo!;GgNFY?I|@BOf2+J#_Z_z=g4bRfNPwz64ldCF_x1&?oFR~S)X zPNf%yyk~Tv>RUK4o>wqE@t?iK0)!RcpG|g=nynV=SSNhXEJ@>`DGCO5NQe}Gk85+I z98)+>5F+o9oq&FMp!Ar_q`0d&_;^7N>zCe<#=3)cPe_i6{nvJaA}50l5XQi?H4g`P zWawP+)Nxb2hI3}%`hF*)SEG>Uar$Q%BWj>jG$*pJ58{YkYYOK}rCeDttu8a4fJzl&XIa!=ZzlJO zg@;0A?YeX(ueUn{>_b*@zO_Klo~rgaZIkS}(cxR}RIk0_w8?NE?YzSey=?YVG;&+& zh{n?&T677t{}3P_ByJ9I>~7yEE#Fy$1i7H;Xq`FJ7cRBEy)i<^<8StoZ#z%IxSyf4 z@!l&z#p(PFUklFM!^Vu`G{N4c&xk=5ib+RS9S}~s$jy#3i#Y+{Yk5F9=?6CDx*T1@8 zHYYA!l^UYp7EEPV>>sqZEmiXmdHb`L11BLDk|5P|(_|F8W@wq@;Q%06F& zMnIrOU-pl^@#o<~!$(YWz(;>TV84x|K}Pb#|8X6b z4+<#sHQ+|P;UmsIcKGj0{&yw+yIub)lmBmu#~_;!O*FEWUHu;#>5pCYANBN~KZFr6 zX>?mmh0AcdMT8;mYW_CB{?8Bo+p6(hqrk8a@)sr~(uU-5tRiy%de^6QXRrOgzkGQg zP;FiXx33z#|DoG@-T|io%cL3+V0P?`N{31S;ifOq5!$i;`>wWrKH-gNnKVZKcwREI zf1Td`xwA}uJLbSYia3Z&Vf^FEfe&MR1MW)vjq6h~CG3CHKLCXJ*V!Xt%NA>Z_1|0m z_lN!O_W8dGiTCoz-X36}VSZ6#TFq2KV44Co%T2BejZHOfs_l1$lwgy*{ZcfQpE=Sv zrBLU&zh54+P&fc&NLbI{yKzdy z?E4te^qA29xG4to*qa|L^)>u??Elas@8F<;7&^cQ&g0VNb%?mJ7W%^Xnt@NX zmOf+J+S=4v#%_3Bn_ckf~y zJ5JE(?a)t3EF-44^y+Q7kN6G+0H;n#F;sbwmZzCa@@KdjQRVh4dhG139GWA=cRGSN zvb#~b1#AcvQ+Lw|dy)`1$pofUN&fVB5-UYNM_N-x?ul+6_rNlLr>;s*|Kt?ZN2Oh0oU zN^n&B5YjkkpLl0QV&7mjzWv9l0os4<9bkv^eNh^E^FNC$JoUHo7YEH(c?&TR*M(8Y z8s|#WIw(BHXcX?{B+)3H%zRQfilMpBPwJ?CgO_xivY7oNJOXhrXK!eMu=b^S*b#F3 z+L88=UCfA2&gmg8tDhjDc31k%1K|0+gZjuQ`oE99cd!1q1Fw{675{OaT=rk?Km(DM5Ap{bu*J)3%zMi-CTu4<`t6YoR)Q_Yq@RlKcJW{p-1mK8o)~%hg@Yrrr(c35 zpVJcdW*TF$llIvKxN<+lS153Q>E*XA_U9GW3H?{J=I^^=K!1q=4(`}3tN5^gE`jjB zZ|v_eHu1(;&hb7WE>6Hpm(Ek~?T`jPDj}*O#vw$f3T3A3!X(MJ!UGuwHUUcOljFNI zfsXPpXWd*j+$g1;sjoBowi-*hxAG%^q)Rl@E;$} zRe}(WF%2n)W79ha{8J}CT*0kKKFKm}_oOzCNF1gCSF%vH3r<4eUD~Qk8rl)B9BxjO z!l22tV%n+^t=1|El8Qz4&qHMdnHg~@qyMEtM9BgW2NL-Ltbekr{A0yKJ^?GfL2SY8 z6PB&VNtDe&`TU+Y$^QZzABG$!BSEW}EB_ki&7)xTIa!Pv3DJu{cq9?G%({l`6kBWP z#K-HfcOk9_zz&0LM_2Uy-}Vur0yGfbm?Wegefy7{4*llOYxWbMjb$`Q4of_Wzm$h$ zrY2n~t=lKj%G}3c6DLWRu_Ml~L|1r3#iP&&;V;p2ReYcBTuIp9x-)c~!%`qR%_Q1x zpwFo|BDWg@yyQ2y9yQS>OxigsFR7WKMz7`XYl}pS_C=OdOCJ~R`dNm4Fyh41C9|0> z(V}Ag&!co4li5;7HrgPV6e<1d7ZHsWW~aw-K7jJE9Rp{f2ZSWko>#2OQb{+@EgO7dy4(U5BolEvo8a}CT$D1}|Q z9np#77xUwhyqI{ii_SAEl4hgP73aFP=Vs2Pk0kaC&{{wCpL?cpib4>t$)Bv2*U`Kk!DZ)n-3kg|Fnt`Q1R9-g3!Z?=_Lsb# z^JH~dSPtLuw+#6i-izgn-1_>YLq8dotSnAbc`ob}YBR!6iNrTyjFjgngR-ZG%4JKU$ce!Z*Hwih6Nt*xAlla(hKpDP)~ zFAem2hW{e^f^iS){qlsaS?36M3o03eCFK@xGUOyLkVO z`gE$YK4`k>*P%+ZPIIdykejiqcFiyvbeW`1f9J%S*cL`m`mf?)48Tq(5kJjJb6`>` z4|h>G@x!M@9mnWD+WCZw_LIm?z)zN>O}c=QBv0{L@x0jIWA@@(!j$m~bhY)K*KVhJu^lMPmrSF}S6Hu7oz~e6+s!Zfc&Oo) zHlJAa4PkWag*@j$P%8eUbvVQTt0i1BO(+X!zfl%gLn{9wmfA$!{^Stj9-%FfP_cRz zOl5dK!(J?hO6S6bpm$3l8@FC$3LtnNCu6uw#Eq1vAApGBzZER3I2lkfFK=3BGdEfB zS~8Xj6_scvqgVyBSaB6Y(}38*aYd}zZtZVA(eb|YoD64r zaP`G;T)?RGX{pt2Ye2z#s-e+b{Mw{=GUcOQltXML*$LPNgP7NKz+!c#NJ$C&+*)Kj zN}xNvj6|KCoozZ-zEZjrl7F;NLvQ4+*mwdY;HH0Y1x+&XfzI8&^oHW(s5Q4q$I}UH zv8|-pSMStZ?`;IWKCnME=^hFQF~mBa+HOuXEwu3v>jWr8B0z}n&j=b^x$lzzH6gna zRIONU*+?rTix!+3&H<_aa;DJi${8-3CLlKHCOa)vLz0^sD9ZP_T8a3Ib0vmb?KPJe z6N;v!$(UZAqL}?uZPqo9ZXW~v%YX)WqMGShetXQlnH(s2rW7YO;12c;$kfhgb)>G5 zmi6aV$v=p~j!L5W6vh3O8?s+dIRhFIM>gD~d?#}dr<|9-0j5AKuUV9 z>9j3A9621qdSqnq(zSg!lRa+Y_#88Q=5J`g{R$5A-x4;4`DeUR5!siY{5(dZF}+O_ z0|TF%T+g$CA~*mT#%qbFvJL>lvc$;LvELDLT4rZ`3~KDOfM~-UtP~V1RV_7Q6|S!> z*|ZrNoohJ)bA1n4?RN)d#6q$2flj}Pc8{05!?_Br-DFM+(Uqol^JB0Xp~-l9PSY>K z!eQ^nkp8{a+was!upW1UwyJ}|?5wt99JpbZN!ay2iOfH^uu-Js zmxGMB_xFrL=?wIFMlbs+{L#@g)}@g1G4jnj>fP#n)ifgtVW+VUDD-0;}x#IdOB_-dA)bV zGbcom?%jabdVZnAZ|jIJQUMOm%_6nRs_5`qRX^U0|DD^Wj=( zhn$6|Ve$v@zt_X}uh#V zt!IURfsX_UHq3A9SGt#qo~Y1JJR3DY4M}A+8Iz`0Wyk{vf9{qZ2BauGwmvvG5riB$ zK(4#k7_4+dLU8|^Fpf!2_mGuQyWz8g;B&xRM#u~=r}qZ8vxd^@VtXuSO!hk2ktW_R z^J{2g!}?D@YWJrUQaBlk)*Y@@K>aMGwe!_?Qpv1F@Wecxc;9J^ij~=&muZ?_p80B+ zXb`zxQu$nfA}&^=(3QZ7B&G?gJ4Sd(X2%NzV13^0{A+zIQy;0V2wl?c^P9t1FT*H} zhOnuYdcej&fwJ;DohHX5Sv>*KZOy#AUHFw0$gypuIAFv1%QTgVg{-gDZJ-Yg!Eg|H zwjVNIyMxl2IOR&TZJ|q&Fgy&w>kci&bogcI%b~1<@OaciXRxv&Br20a49n zPZGW3_97|^k*nYP{{Lt!;XfLyiuUuBQP5@Se47{iM3m5DF4`}%rDR?wZ-tDXU<@)0 z6yz8-lQBhq_Xv%z1YgkkA+O?Tm6CVtTVMvxT)t1n%Bi3s$N1u*wcQ_B5X^%rn<6R1 z!Y2A1jA^zD3SJZ5JtG|5dN=Z_0AphhmMRhozI}OCS7av&C%z=_1o6V2e-a0srO%PI z|DkKD>FvvUyeyPV;qJuKUgC}@EL~8aBLV2k^CWONf&Y55X}j~^qb}Av(rOdhix#GL za<2ASmsPpM?)${WBqo1VmN+sV!ETp2#`DTnbr zOs#x+_wcsx5+N#0&8oFRS-1GEXT|#I6V4du==NQ?9kt+QQ{UK=EY2LzCU`KjC8ATi zbQ*9cG~vh5JX=-Ytda*Lu6~X2DFms^k46x#N6$3981Q;-WV5PDlPD(Khc9Lts05c# z@G&gl{%rwb;Q8tkI6Rb)b>gI$wce%naeE&AwyHIJkma@CLIh|>B6lC!o4+9y>l|tf z>5;X|xjwus$qCtjML;jt=)~N%KY%=U5deb%Cb%`-w%JE+>j2d@Pd6#_+%`FVM=`Zq zD=b5+4d<`#?~Iwh!d6{xrSB)`dFTDI_+8S1E~FiuUat9GoX5laA#E)kfuDJrpL)ES zNwb!Dwn%B1I_efoC}WEoNY*sYVJ^(){3r_cdJs5Xu8O6AKw#6e(g7N5iD2%N!L;$c zZv-D=8^LHz63f!lez9B;1nQaQGxWL*M^ArWS762@#12b2ltiGpYJCkfbDozl`-~M& zT7Y@lx=G0uZS40D_yDk=q*`*}o%npi))!9)1Tq&4VvJFTHh?33Ax zUd@styQ1lMf0g9g&z*QX2z_t5@lD0)u&%7oVKzBs z=(Y;|+yp7;agd%}_RMSivsf4oIX`ZcE%-{}=!qGV=R7-+8e@cP(CyTZO-u6E@UxZGpHggSuiXg@oR;J~ zu67o`xjG(t9PVcx(e~yxk7Q7WP?{?$UnN* zoBKaCo8E-X-$%7EQ@4dRmG;~_{qYeA(DI!i(XuZ;e5>;YWy}=w3cfvpkAIqm<{z$q zbzHxvmDIZU;H0Rf{j@w9V* zHu@qZ2MKnHk^J8qU(UfmStPI9O{nafO&9gK0u3`=Y2w>B@CXJbz8EP3B>Ja)DJ+eN zz?bLcq`jQEL))WBEf`QPTl~zaV+8N12ELOZ!X6Dg`?hfgcZlt@ryHP;8yOC~? zlrHJ+?vy+?ukLU2?(vOr{+=J_ua5Pw?itsdYi83r>aSV*m~&$4>v`tp<@Zw-O#__8 zadKdw)ji-XeDUC%04c`nEaREfC6YnGf{+NIKX8AYp3nW1mP3Tb;?_J3)H7v<_?an0 zmK+gG%#>q*(#yy~SHw`fskNTGUj7+YV$rbJJ->ZAWZAI)7!;?#O{y4#( z-01^_6>#0G3t=hgva*hDu~U1>xkVJkXHL)Yh;#g`!9+T!{;d7?z09ZcXGk5lo)98Kqek7&`0kT{iuc2BG2Z!WFTRUBp6A7P(OHW= z4(OP$1;zHM*=#ki=JrpG+BE0i#zDZF z0Q*~WVvR2MnX?#63WD~tFsS3ZWNDK(P03FDo;G6QOm0rDV|}_L{VeF+oVw`C;Tm=) z495;;?YOpRJ~g6W?u^B09W4lB;7qUlO!sQ_?+M4xKU4BNgSG6PH|1>g@_cmRygcUo zNs~~mItA28W=*?Zo)q0jl@fGp^DJy%?95Icx`^N<)$w|uz%}|nYLQd;a>FhR*?Z=a zOqOfMb4xebvr{XV<-P7)zK+$vs~TyR3Fq0X`C!BL-SCpbb^FliQ)Cb|wEDVT z+#-wE%AhXuc&&B8Vl%BE8kk=w((VPoGh-+vp@=PavL9a~!n_R`$6d|NIHYTo3EePeL_M?wEE+(r+DNnGTFk=qPNPqg3l85+6 zF-&!W_#PKKL*;(Lz#h6DXk%*&gxH zn%$Z5JYh&{c#|8he7T46N#~=FXjso8^jXWs#zD#;luRdr zw3w-%lLt!!%Jb%`EoI))X;koS3?(a53SJ%awjXI)MX28)A4oV@4O2{otR8y+BU@bK z$Ma=I`qRe!v1Z>6H}#yd{T66qxsdNgQsOZ0BBz`CRq2BBN%|DE+hlkl(b7OKR|pSj zDpd6jg`#HKN=0~gMy3H+@63}QyF?FBqSg`{w^XMz7m3d-(j7Ruo7pbvt#Np+K|pYS z3s$7Mui9evU`ncOh@|3?xVYZYf(!*WW3BX&M*FlO$t7~O#6sO^WfHHBEmt~Kt@MKL z9*nf4pga6FhFrR6F(7QKFma_U=2XAn{Pr#^Q7r%4&3|SAJd~KS3p* zwFmnhKguX!vlwn>vW`hs8jK7BeQabQir0CvnZEYEqF21RVv3}bM$zyR{935FzA6J0)@Ym_5)~C8O zg26ly_41PvV2cim)6#n&Y!Sip`N4HBNZ17$%&7SF`@UU%{ZFt3E-G@CADb z+=pCXf3{+|C!Pb0NMNCY(Wt7UF0|K`+KHq9+?(dGC9KD9bCDxa|1a&mVUcE^L+C?*tjR;3%2%jfg8v8{;`d*v8dd&M(_E1u@ z*CPo};s-Q3V3?%-o~;Mo={Z7 zR>uD^`T%B}YrWh0+va}ad1(=Q;B46+3v6o<4@6!&)VA>+Mtkj%N-LU@8I0Rou>9r& z?z=5W=sKnWmZ!p^!Efw%mzLL5oyriAi zGbz5L@-ACd!b#0#=} zh~(2;(y5nK9~aYZM5EHD@08P}{AAf6q*Qiw#vYSPLbdryL zB@>^=b7;lwG-vH?r^=9*JLX|lz+jEM(&=?mT?*Cd_swm_VXT0MSrNhKB$#6JXio}B z8rN}=dBS41eyjgu_C&9v#eVH!u5L`*ufEAakHM9wuy*08rop$sq%EYR2Wi1>ZlZp$ zcxgf9@wApQFQKFdQ3Q|;5v|F8%C&A}+6%qVZ?&_pV{PQ3+b2UDsTEE$L#e#;X&VNL zxntq+4xW4JT88^8QCZ`>*npX>1V^kZft|5=QffuBXV$AHueJlq-RiB{&3CP4xsly_ zI(5Li;nDHfZ9msl_Oe>V^w7lK5u*Di9?5c;%vRelBD&}oEPZM_j>6`T;=T%YKzRH) zU%Q)eHSmpELLpDOdN`4hm9a9bO*D$OpA^~`tTSRXPbyh65EVa+zk$p2!tG+T6QlHg z1{j#_QK5PFc4iU2$!$%wIu8M#sY`7V3|L#t!#(?HL=ZQexirb90oYhF5Y;+t#ERP$ zpGiBCzT6j+r*?{<<(Z3CW4b6{FyCgtfAsG3a)=nOTTI&h(quZGcV^GpRyKPbZ4=^b^YCYp0}PmBOwZwqYC zbUl9k_i|>FWfkVy zPj24r1ySf<7S))>$qG5w_cJ&y7#H1)`f)TZdssg<2TX+~Xf)W4wevshcp_aOILXmd z(cWIzCGlGMP`wS+xH)DuQn^E0C;V_*;IImAS?#t;>R5MGM`bXXWI)x!?=4K#sgvRL$WC0pPS-PfypF$>iqr7NuR`&B>c-X$Br+L(zscI=BtFww@xk z-~EUMo&xnfI2@l7sNk0O`2FtGM{v?=oLu6f91*8VTom@^4l#=7{uzu5fq3=LXl^xG zRF}>_1Nv?089}q#-PEf*U@w^ZD8bj5k+FGogw-0;y4@}kzWHrmH z4RF8Go~HGv3T;Y|aYV2cTWVq@^Zl~0FZuf8hX-gKH5l10e%C)nre8zSXf&xCbW(-w zcJ84m*(RVmlK84!tCxi1CtUKLAHJfx0v}H}j2sAs+(>OPCzrZ&=VaOajeRW}HT5CA zQ0XA-i5CeMA(5rJHPk56@g~ZI4RgMY?9*o_zC82$BW+i^wKonh)77?m@co~m@Owgb z!|K#~Fehj*hPxdtrmcjER(d&~xJ2m1-AAug4L10-yf#qEx13KSfZ33s`U-);fclRb z{VJ8aPT1V@n=+fMYRxhVjr>g|#}~o8nSFQEfRHd36fst60JY_=TmLwlIuz$*dN+Ux{>%g4TIQ zRZEs-cpt(&m(P2p+9p4#U>(?=Vtrgf?v=`sc}pwrfPl@#N4e<`(7Egq6<1`Y$OUm@ z(tFA3+4}m@y);=`Adl{Dn9fO2oG7IWVTPjyM~yZE0h#7l_wV^`gHm3LH%6Y*J(ccVv=O#_Aaw$L6&(QrJ@9p=O@`5Op$k}Yj2Ew zI?OSedVTm3gIi6neI6&Gc&qrc>X@ln%K{-|BPQWm+%Ah-#LO`~yA$nhLaW&)zhTP8J#ZAazJ3sMcpcBQVWh7GP~bp*7Ul_??-_S|;C zxnsqw)SOnKee>!BikB6Pb?|4zs6lT795+behEF;u&A8!`te;|C`j9(3+9nt~1J#q;%=#KU-0=v8KF7$ffiQY@~JDVX>#)F0uza|7qf5 zQjf+f)?4ePYbt&kBqXi^eS@fwk+Xx}z$htoiAPjmQOtM#T0gHt-qMAxl@qjPc^#;7 z%uzsT2bNNU@~qp{WPHJTfIi)f*rDM4im#g2pNCSENW1rZr~~itWPVqD7B_>25B$E_ zfRDSrx>e#n=-AeDQaY<_=m}*aa_?P9dUhgN_<4%5Y7uCO&(Om3&#EU<5w3K1hp($# zZOva?$t^0&!Yy7yi&WJOWx>^P=(#Plm|6LifJ&aBW+Wf7S<)1Xefk0~DERN(qdF~X#=W#6BaHtgat0b8HVo+ZehZs|c0O*M` zn$|bq*T}I-_rWa~+kA4rO2M+f9=cEPd2-J-1a>?rWh$~Lqu&&fL^qp?7{}um-Iz`m zQ+bUvmc6>frWR)Lb$H&M>3Q=AVs08!JaSr}&6#%zO|q%@lqFu2stX7jj^R;E{S3T6gaL?de1w*t}_`Pf^c zfvLw8V(4qPWN4dw{~9gZpm?i@;=%~3Wb%mf&1pY|RcM#46=J@F*>th{=?7dwlB44T zRXgXJUN}}(`6Ai-Rj;~F|Jqr>z}Frz5Ex-bVWGCerx$91koYqY1(S@B47B_}@5|!# zJpkYN#M6L+(QLHYv@Sl?w)Vm!57Cio`ern|#h2PcHXX8v?~6ByZUsg-(}SMXOc z1x%{585OQy&90QgC3%nls|alA?7qVMJ{79&6ZZ~=p#-{z7&C%UQ;kb<$SiIm|5rH+ zZtR-(5MvOtHD?fBeSm9gzS$O%9x~x8A59cSNDJ@kGB*MTOSLg^)SVht=vkH(?85z% z$&0(TvP32NDM>@Y*Lr$4)HXDbJ+Cpv2w?)voeJLtLI#LD{-=P|I_3EpECmfqi!LrM zp)v-Sn?z|{1rg7ULA{iuqMJ57{}YrAdH-7w9AX{PkZra^ST$QTVsqwI zSqN=HON8pel2EyMyGs+Ded$J1)5apx-TE$m82v;4_2G2#9_tC$7)+wsX^m-ag9#gq ze`c?U3!AZ)k&`3cube^&pOTm)%XAcw9xO<@r^vR+m@GK`yK|wLq?HV$K2kUbih{|j zYqHBdCdFP4O8YN5r`rF?W)Zn+i`n%V8? zKb1P}FOyos`n47sVBhgxlNlGY*k0^ThhZ~WONEC@@Lnj@J}-Ys`hY&?W*Frr=rv4*TFpJWgp4n`d8q^P0|+*WIV{)gsHm8M&!ksPS#7Y$7((gDu$GL|JWpY!BF0!)<;CPizn=ZRd}W7O~?m`@2or$b}Oj7HsYC zPj}kL6OC3^SL5a2-!BqUI8Y=DwYq=UcWnf3v zW-ZnVcGu!ln>&-PtcBGlS8n_QTaO8+JL8{SLq+#S_%!^2S}x)i`VNAAW$=o8`cT1I zEUgV{aXKtQI7rRV#YiHZ;Cj>wU)emK%<#rxBe!y zQq|0p4Ot+h*RBM|fAYjOB!4#*OvmvxMBYF;@(yw!yC;@!s?Mpic!}LzJ>NTb#rQ1z~Nc2bj@ z^I>Y4uCwQhl~0?+?h-2?Tcl?EL=xI`BJDF^-41|t>T%ObWm;rVElvfR>ho~U293JQ zBW*AWOzHh>jn>$2Z?AEL==pu5}Uq%GKqJA;xs{@;KLsJogX$1~^9r<&Bq0HW@~d%YpO_H5T)Z zLkRxy57O^H1c>qq|3*1s^aMx4zANZ@lbjQn{0H;*ycV&sh`?%K7MV&qp=&yBV9bk{*D~mUTtFjXny{$TRI^kneLnnw7Lm(nVOVF!dG@Wps^Plx)MT zg;mqlZnI89kPbVfhRSjC&p;>QzyJ{u=`y)r(aznT^CImBVm$ozM+T=rN70}}s$jsU z-bjUJgAbh0fl8?JNyPE@@Jfm2#N7aqdugE*pU2@nWapQ`8a0?14AyCnNOba+ZM=&+ zA6TM7N_!O`n@TH@vrAf1ug#ksz;suoec^;Wb_`?Hk`yH3At=QZ6f*n0%s#1y4RgK3blR8L&$T{u#p> z#q>KnWjF}~6dW8Ef4)T%TU?dS<3TmC=T#x@vNOuBcs7Z8Yv6)ETiuBEc{3jjF1*Ff zGwb=`KYsjX0Pl5wR|EqnXMW~UZ||M%*5>cwa~Xe+d+qLiTmSL^*z9JP^I*na@Q!ue z^r&do`R3(No}JO*;GM{589KAmufmn-;RurCjfE6dYhZFD1EY$P^-&z_)~u--vMED# zi@Ix)CoYON+dCAvMa1oG?ZIEtldD*H_Q`}w6mc=3gJY6eEkjSa1QMD!DCqV#cN``s zgzUA79i?^?Fi$VOzaC?=|5nb~d}*7qxxT{@YYP<0eXCoL!zI*H441nx_U@SY6il8Y zqw+mfcKORD@sD1DOZwZ%18X(XPAj$pk+DuXfu9JOGU>vBwtZ>S2tK6eES*CO8``FeO$85VQY{0 z2@EYAl~t=X51@~$4IGB&6^Mjbssd){A#D=~cp2S|UuRW)(6vl{ls>z18%uGrcds># z#3aW6Ih8?;PZOl%MBD9BxcFA1^J;bM>@da~_yufoNsgo`QZyuTO7t#ukP11|40Jxp+Dg=zH(0Mmd=-RhKwI|4Dk_Yt#qf zr2^YU^=MLk(6q@ANz&~@b+g(jYHM)6%8M)k&ZPuZ98L9!YE{VjL$1VI&oRg~=cKD2 zexPxGnP8NaA0N&)DAx;JYd9`sHGwI9Z+8&D!d$X>{rgcPyOV69`)On*#5)g9WEk6HuHA-YxyE5NB@6SG z`7+y)AIu5f@zEf(E5>H$y_J*m{$~5?(SCW`)_cyTeQ19L^_ulr&2FFm_Pq~9XEl2_ zlkwUU!1Kny(P4iwQ|9ir>AB-++>}hN_I~&UDVB;$Vf7}i@foZPCGdLO z^4_jr^FF8j@Q5}u3a%*bF}6xbd9LZ(`R^$8wGv3t2C-XEqmi-)h&3p36w3u9ZtwM?~^1fmXE=<5jxzzwkQ~MrIJDgh6SvkWIli_ zb{}d>Hyg5f8^r?T^hIEd8mutK7G9qXCGaGFbAO1CoG5#^`&FxnL(<}jijFP>_$Fv} z?#Ux?%At_lc*Bdj#?sk5%dH;Cdy^){H?`i0SwJCc;rwc(X$`aGb3_hCrg*N~CMbmQ z2l>6cVv(Ze6^YM&~^w(`dt>@Ggz>RmRWuI;-tb>ei$!HB))fXkmM zRjV1Tvff`%==Nb(u<9vbr=#ZSY?GMiVL=MTAMLx;kdkal-yrzAptivLM^rwN8s z^8AgIfg*JeB!g`}Zz>P(n{cte@=x!f)S!p>n^q!$;){EvLpRNM(Tcf7@!fDFUd7A*S6EermLEL|fb8IEC@0B1Zng20xK`9h8y#uf*$-aY2XOu!uA8Bg3NA=Bmd#}F-2yt28sJa17p2mZ(Ez4r79yi0eXoBstrUYAXK6!ch<1HPs>TkB zDanK5!PjQ^-gax01B&pZrsPL1mrrbT!~8>L7>wp;>fhJFHfs)=e5JMPX@<}dp9+XC z(OaodWR>C#%LnYv2_^}~R@Zej%1v!SAq_}J?o)T%J~wjURT7&L{>%KUROLUneC(-f zA2+GYTx1T%e+1zsDh!xm`2Q{%)|33d>5x*nmc)9GWHjI4mLobTjP**&^^)eiz*|il z>+2)#TZIE!HrpEtW|O&K!k_dY4};cLf$`+(B80_!{vkDHXsBJx zYD3^b+as>C8GcnY0#d-pxuPwO^uuD|5?=K-b$`I^SXeE^-(=GyRRF!d6evJN{vCpcac@lBK z=CsVA41DMXO4}w9#@084MLl5_o_(YcNlu3y0s7*A40yxM03)voI809QGL729)=ME9 z@Aq@?p!VJ;4q7`qGJ1EV*oBZxcY_3IX99hVSZ>SY(ObvEpH8xj~tZs(9pAh`x{X5UG7~8B1qJ6$@B$FEFC)*s329N;5Z>)121;P1!xC5=UeP@C zY@OhQmQHrOZfdRSpFj2X1w1U}k*GQcYvq%$#>UX%WMBC_`{*9rl~}xGnu^`!W?{zN znI+ubF(c~MxBI^=`RIq<%G^&af456sbXGRlI~J{4BdpZNU#>aX_QiWe&%E=o4~f*Y z#jfBV)pf_c= zsRCW%VN;i(L5!;qZr2rVQPD(%?3bQxTrFzvlF^wuVQD4X->Z75EGc_&$>BHeFy#YVtX*49OP|2*1Ry7R#} zX2jGc^SjL7z!tLD`4D990wvt{=$uenA*m2B+-h;zfuF*D+FkahURk`3tPC2OBR$*{ zC}g_ngj38l_lyfr7o|Q6F32z?a2H0#=gobOB|i=~)`kl_Q~sJYGnkw4lzBMt5KVjo z@rf=m{X;(f=nr}~#&gv+RW_Q+xb3e$_@l!_`Uieo&UfMk)@pb#3U~8fZR0hWVXkAr2YL3EQW9r`CPq=Mg1a1fmN7c=`PS8!EiK>(K)}`Q#5<6 z?xoW;HuSXs0#H4EOm$$i_A2jMt)x<+t?;e;3`$%8S4SenUfEs5C_%_Pv^-OXy@pjadr`v>Hl%sYcD9^vpIAnzFBqrjPGrKTy3)mM}Qx#~_hg=2FCV zBb~5*t9Qnfh?`gX3K?rf>KX!C1ATiFN8tX284AX6f#q&u)>vG!>F`*mJ&o>V$< zs#EbD+fp;-n~558vx_HSBsL-e;Ze9?0@nUSQ~7F4cDLKmZYM2X1o6UZgl!VDg-OB> zh;pKIM1;C%i=~BtY9Ps+=wy?blR%4(K-F$9zA4U}qen}q$)Q%~nX7qQfSX-}q(tz2 zAI!tg2oHSg`zwS43A)xBUrjmVyZhf^#)Yy)1+qYy$KJUK-K89U3m)>%F2Luzymwar zH~e#R-D%o5RfcxHT^`bG@Rv&C(d zbKgjHIHiFxKz>Ne(t7Pitni|n6ZuC8Tkt_b5b9Ct?Qy@8F~BzCsRNVMejdjII(;L& zo^`HMd?t|gy_P*Q*~P8;X-mQO+r{l?6IilF_>L_csk}|ZjeI%t#tBl-d>TB37!<&h zmEUJ2mq=TCB@>)X0?8%Q6Q}dg14fhFyu<`J1l$h!}P|C zn$a1M!&JV;_Bg}Sd?OAAm4N1}?d??DA~ZvE@-U^(v`amYoD$oIsxbeGG=OmfY!@ii zD=e<|++Mzrg)#hOoy+EJ&8>LQ=+l1hRlfOU^U38b)c&?4_En(*S!S;Oa&C2@1%!K? z)#pf*8A0nPFi>{^j^i7sU_8XTCoY+Nrw5w2SM|$TjvsC-cF*y^0KXL!sTJFgnj?rg z+fr#Bbr|!oJb#U^@DTM4dvnEd%s0{GDw^Z!b&ZT%Dcel-cC5W~1Tka2j9AT+axmPM zw9JXN4~pDf#?BtMXR%@+5zioP9QCT}ys6e|eZAOaRxqs}hD$-S2A--PgkSR>A?k@bj+wc zoIZG#30xi0(EbYzb`$CtOF3L?FcZ>lSNHFfv)7j31*{o0VFF0>M+kNu7{zZ=v|&0{ z_X%TWe5^l~I4?C_8|_wO3%nD}3oX$LuDr}hUiEHBjnESfXozricUUSvCY);-xWXB1 zPMT5wK@PQvvPG4P)I-r@MyVVBREtu7xKtxb6{K@36d@{u0g{DcvRb-r$hJOpyC|(& zLWfxIi2a}-;#(fjCX<%sap(CZFL>1Q2HMA)&h5$^&X3FUg8_%f^&x``k{33;!Kcd4 zHon#mvCd=_z68S_uW=(pjn*rIRlvO@DDb|~+@%e}*-^sie0T4bhl7EMPCo_Walt_> zKTfN$k7rzD^9J`7g$`)>9##mIC?8S0=E5mgV<{1rO$3z7G=5m@He>TBk0RHYPNPhd zJVi!h^^B%p?z4{X$gPKaiZHit1iXdo)5MxF2yjZqHmldp&;d_kbP8m8?Kk3j;>cA$ zkq$^yK^W^lR@jy}w3xG?_b#`3#zsMeq72gi35PB5l^X>j${^eam$7aFz=XDGw|*s) zN+FgI`@)dRL=q2FnEO6~UEDoqbjLb_L}&&>A+372dKQ3IL4&24KE)a}3@WWPj7GaV zBs`R@7*Et?*naXazwyizKc?KwUF!+y3zRq2Er+>kjd@s3;(i#WLK@X|D(A_>i=i8z zwK%0PF$N=zZ9>8=SBXqQLdr(@KELu|G0)s8KsGmRmO^v*vz&q=)3)g(SWVF!VxxzI zvK3GCtgi4=U?RdB?O(hVFvsN~!6R3$*s(FEoizNnW!BWv^PyX1G=i-9UlG=Nl^$?;?}dB||J4;k{i zldp>(MIFkCq3&lVNy{VGt_ctmuSgy$o~j4jGu~s3|F&q-L;()r_%j%8Fd85*h&(Zs zU1?BQ(jt&0=!A*|v>qegIy z0h>&aM;uw1*Fp<5v&mT*e)rKmoo?ByE%7v{S96-vyr0p0^Gtz((xl1#4Q`KKa9Y5j)hHPLH6{&X=YHw39jVEb@uc(ngUk|F^+xjc zdIuiaYgnGl!P^`+x=y1&s%bVjey=)9%>c&Z!n3dWp^)!<+gr7leJ+l9N2Io}e5 zQsA>%qU$>Ovhz`bMAK24o8T}-(a0hlj767IZ4$VI;l6l=W0KI#W2_@t#eq>5G&$~y zsPG>%!PL^I*JMbi^1!?`0N#^Ko(n=v`}C_d4tFA%6q4wq`oGF5C~m<5`cPJl)nQFF zF%wwHqZxN{+e zCl?!OpbZSR#TM{Fy; zKHSH-=}otfKuvJn*a}eGiA!TIHzjce+3NOBw~Z?4dXk+KN@Yh(UaJH|d7J5P9p_q zZZT)Ui)f6mrZbuJ^8KqSBreRJ`f5WM9C=ET#{`bHtl#ivJvKX@6SYiO6iRB}M<;@$2ucre-eH6x*^;w^a$(IPowNZy|rb=u1_d~f=^pQ7|tQ0UMu$GCD};Romh zQWT@)r{L!1o=VlkwEZ;JO; zyIDSJLrQJK?qcUdgC6#FgY9Nk?lMhJp=P@kxQ9`9<#BwVI+0~OpSySJZ+5#aoZ8_@ z4+?oIr4l|oj%pGZ54-@@0p(auC@s$hilHRNMIhsEwm)T=LD#17{&2Av2jyF)HV8Ig zAWJw5(T-w3cyVacbwD<*FmfolmO<$%>P=)iQI0J+6g0HhFmiXlhQC#-=6gr;8F!zC zPADFPl>x9!)v&x@HD*RGWluj$ml7Eb;WO8z_20fa(kJzbN?Y8Bd~3kb`vr@Vo6cz4 z+Bl2>3C>`)p=$de)|5WRf3jD0%N||8zU0d3O@+jo#F*0wsqNhqO_T9VfNZf6;@;@@ z776k}>E29C0_zjR<#&-O*NvU(jbX)PoqQ`kSLB^%djrCPfpXR7q~FfU-vW^&Z5#HGhW9nrW@LVLR$i zo}3E;Vs}4VNTudx?3g@D@Be= z1sAhbMsGP0lR_4)YPcNVTTWgRFM$I&^;}I(r}@OtPPYb=Dzdc(GqF#_zrJ$HXE6Dm z4dW7XZe!2)Z)dqAcj=59= zd4O#oGsT~2Z$2P(tGj_He(}?=@@F1b@Z1psB7A1PZWIOmn3QX=C>VwpIU1?>8o3&z z&u|gAsR3O<+#>x0+ALUpV;jsl2h4J$SG=vE%}8yk7QX-Ev=w(O#3S%93$U|CNbT?w zmGLLzY!&>$5{r{RvYcmDhcDaXjUG$hgjpAYwj*5cfz; ze~2?`Lx{{RPjURHrI;=;c+YPAillDup_4A(q+;f`x9oa^FH^xLO6iZ(W zS?#=y4_y6xt8wxBw_VSPtAAdEHwfU`DR%0xAOVJwY9vJX+-8?EHVv`EA}$y%ovp1O z4~8^3MwaV9c8Pn1c_eN zzj3L_Nt@$lD48{C)p#MbQg%c%OGZ9V(qx-ZB{yP7A05K71g1CPV=4!;!5gyfg%7K_ zb7hfA;h;F>&rz+ipkH`!P&cvOi51QrU5v4>tkI8-u0=l2A6s%*bI_zcnJJgc^@L*q zedAnXS6YDrNb85=xe~E#a(cRO)NM?^w=Ea58PZ${x&x293pR9y=bs}Q%D7U|+#>~C zy%N@&wd=8JH+a@t8drT2D5f(H>b@=R{seETzp&h8S8AoyIY4nBX^M&l@WS|;K$^;h zygjT7S64>e{x3)AeRhaY=C>Bc1Op^=|GpcZeUk+;ok`p;7@#?}+sk?CYO6g>@f!+6 zQq+DwsBg(MsAbXVhfK~%JG60o(O;L0kDWOSl}c4y0DmqbvZoVDwoWcNM-~g|i(4(_ z+us*iS#%ay+y9dS^B9T`WBmCo-y>`{~I1 zB1pi15RV8%?kpr$2`zuRMH%3dh2U8?!M9p%>Roi7b<1XYWU1D+Z=XLiU!so&*=2r0Xr}_LoKKiRAJvmbLSc6+i`b&Y63E9SzUPzASGoUJn&i}#b zYv>|KEN5cF8J`-Z0|pNAfB^;xKF7H*P4?UL+StHxPToSUzr|h7BfgFHe@47u@Po zXICtJt1O|cK&Fr^CkpN?$Lo+xS`?&a0m=jcfpmG5O7ht66mpMsF$%4$3UYi`@5aYM z{jwgmz5``E`O=j36{MhWZBDeQvc{qZDx3H4&45k;*+viQ~~9uUjs zYy!MTyfjj%nc-FrgGw ze09W=h+-?>$b4)VAj?l7Rgf(j4583PeOffg$OhzP&qd^#9sMIwW@aos|H4ky&ep)@ zhyUKk8`fF0onUKW>GjI57vi7;VF&?)LsV^a$o5z4j6Y&R^TK8avHI@xpZ0ddjtMq; zums~TBV?0b2e1>{@M_&V$Fdo4iGSna$sJ0Ju6!#ats3?&UokP`J&H&qD#u*vN(Mb| z!{L7($j{XSB|8lwrIi85mly z3k278=%01KK+-H<(DPtzj}+n_sH4mvHtaGlI^y@!CG8Oqo4nkbsrU(Kbooc zAbT?O3h-tqp;TG&k3g_0Hx7kZI z&?fmqoz|%;PkDmkR|V-SD~2zK@SM^f01nRE=A;n4AetWcA9W7C6#T)8qXV#GXv(Ja z-&f@uL|b8Z8oUOd{wFd1_s_P9{GpC}snJ6Y4*=r4KYk3oAj0$ad;<>FZGL1Id_lA> z*FSQEvLEDY#nKM2Be`^4?Oy^&?~_2@Zg-S$3|R*L;;!xyf2eb#HgYTG0Z4$SuV3|f22;mgkKY-__!i(-+1rD%d*&J^=^xs$Q;sW%l*PXx`@dbld%>GcPecE+OW>5eB zSIGY_DCAffTkz#Z1NaNc_#f5!&;Ph5@IBtUv=re{BQ=*&Lbv_d!05X9cY1fvA7@&mRIr2Id(M^{S8Abh`O(hA(=l0WtIX z+-dPYs-%PhXgvlxJMzoF`u49TmD{W`mOjh1q+dPpi{A!5ue}!r0H|IL|KiRUN=*P5 z_-D_JXEgCq1sYH#-pW;$f5Qbh_47fv&=k-MMY#|Aix$)MCy7(f=$*%}@%qJ;0CZf@ z2SE5xAFpHbg|Fz1jPl2KAlQ-gD)9y2f?(D<`Gv+jBRs}4dP55jzXXFv;XjCYZ>Di0 zX$IgE&jeu^%!?}lzj5*bFf>=+kyiI!fO9+OuZ2Rk&*N440YGAudA-#C5C`trLirMJ zzXZG|;y<)`WTth`V+Od9Zi1rh|8J$g!3324P9@0N;l(GcK>k&F5XS^T@iXj;vMiAO zn>aeq&sLcK%lQk*^Y;2{*`Bc9@=Ra@+!$dBrtWybF5oxZ!vTEqC=smZc<~7*;D3P) zGIclV)3a$K!Lda9H*qR_frF(PKV4qZrtL3nydvP!O(Fnp7-4r|ykOTe>hg#H7|b(8 zq=EP16K=r%ikuH1s#MS5{ROcu7Hq>c7p+O+iqj8yjk++ajp3w?2= zXNV^t0qhLHK1vzVi%)R({ws2PMz{JHfB-!H44i-QHhDHsC4|61Y6@HYm$ae#OB?O= z4kNW^2u^%uBmCk@&k`5)8qlgJ2N>m`7oWhx_ebOwb_Odd=;1uE1)`3)bN9E8#=Jz! zCIZ&$cCO+??XUMp;NTE4g~ZTg_rm)q2+eH!Vl;JTsF(t z4PLqDdkgxj{|{43NP&Bsx!791yf^6Yz4e&<0|Uoe_M>*rc%61;jwCLQeQ@l7wJhlO z^x&i!La~He#GwRqJl$wd9YQ?1x7V=oS|j2njHFKTMNb+)mDeruYfIP{daYb2dxbU}3a}#p1T*wdNccN6CBBVMIQKOo! z2iv4g@<9!~c*K5YUw_d2|2P}Xr0vaRc;x??1z=}s1#9d2g043Nf0SjkN93b5#Y4?C zu|=|-ZyDYjPx!Q)TyJ~u*cM~)ehoIPT*>&42lOb9aQ<0fPhGH&{a^~hwK4R%wIA>O zwEZ(sT%9?C%hFvX-$rreBu^iYPIT2#F2W08%)iY-jkA;3^b_Bc5q(DS539BRqf^w+ z{;7CU%G(#Dz4!a0QpW46qu&^-O=ooBTEBgjCmsAa3zwVOyeThNBpDJS5FnOSVPpy+ zD3L+Rl1>#Nz?CT!OdyVI#huG|hd&z7b~OHwfrE~19kh2rE3k=!!H|CuHUi*foA-~1 z7x4CsC31WKB*=lqRlR(Cy#M?7&?D5z|M3NHdpB7IS#B+8my%G}uwRo4ag*XpI4Y^w z$4nWECiw6V>mh4kAwu`gAp+e<{yL5J@1lqC8zt(FH1mOqDS5w4;X=t42+z86!230& z-$r}EhkrkV5+6-}Ts^CDR7zpnNhUv`DdyjV$xzqZF)?Eh7exZP1YqMa~5ugcqJ9e2o<( z53|Vj;6IGtDtO&NtB|=TR_Iusg&s{RtQdz~`df{eFS}-31M|g?KmSqT=NDWUM_6(H zf6bVW@v~)pP6O&>?L?Jso2>76g_Pyyo3k^>UuE@C@cTm9>hr~3XUpRI2d9FRAK`Ms zjI3m3lgt!rjPPAswD8+boB*>Lapt)K@oy^gy$6u=NM+7O!{PDU&(VSqMdE?ed+>3G%mRv83>=81w>z8ybB)2bK#pl(#XTL z3WW0l(J9>GQfiV$VO#?YZXKObcOsbhqM%%;ICc=rWs-$ijOzH~-t(Rz_v5!yf$cK05&G$K_Y3P(vXlW!8LPLvyqM zpY!GaA?hs{q6*ixQBjZqq`OO6y1To(yQI6jm6Q^Y?k;JDmhJ}W?rs?3Ecd(j`ToJo zntASZJ@-{E9wV;Rm}3$#<(Rizaf?4U240F0?E!iw27X6oUm3lE=!3>hz9iztpt4NP zpC1jbC+jvzfYz!qZAtIv?rG`_-Sai^{^3NT=D}jAjqA~g{BQy(MY|dkdb=74x;kxU zTmt2HZ}C3H2u7ue+H~`Vr+UATBXwWl>b!w{4M9~RO(9t$aeb4cc0AQx>xVX;hAZyN zGO`RV36R#`x0LF2sx~_0H$U~~PBP8?Ha%+Ab`@%bWV-mo-xhM1#`u+kzc_xijrrs{zTRsF3m1|f2UeP~h*_08 zOB-w7*J{Je|4}byLJL;4yv9q9{i{~?aFUmP)aFCI;kqye8k&gL^=YH ztGbsX$E~V@R+~UT7nIKrvK;DG3_e^6gLQpbqoCE}j9+w9k~{PNcGs$;Ee9$InQ za!lQ~yzhoDwgs6SIatY_%;lHdJc`!tPruFtKuO|xNF`Cln_F`}v(3Ptu)@0KJ=@M7 z_$&+5nFv9_;G{YU$SRIf47i^y69Lr{W-E6R@X*dt;=IzzBPy$cFx~!soUcIUJ~%w zagJ6~_7(?UXg%SS4tH)UNos!8%hut+?%iT!A=$LcPIu+_%ZqL0qLBN32%W0*6hgRS z%^rI30((<9tWMjCxvpJ+H+MYU4))kRMWc|NtUpZ56u&)qx?is@kVY@Uu__u%6`_#9 zNXg!x(3L{iV@v?vOEE68HCARjR8(0v4c5+4_rGQ$^m`E8=3W+EqlcMM@bF|Jkcm-$ z!(Bo?>+=j}@@jIiRrOmo57r*^^n@8swQ*m^;H5CA{-RXCv+;FzSLvv*Lo(PYBxCbf z8+Du_Yb9n7CIDYNPNLSEUu*n5a!8@i&EU>{Gl(^%Zf=q5s{V(c{@Jd4INw_tKt5o2 z($brM8Wgi)0Ywa6hC&O5zo&$`w}+X&)m@;YCB<{A%NHVK;>UU=5z9u$}YyoZ=p}FB@4T4rY zm$O++k!1n&Mj3P|S^;;w9boBOwdN~T%(#*;48JmxAwVIIuQg(0+(A1qRok%Wc02K? zo5Zhbt-~<|NzMSKK&$R z-a-n_nr9tf3@$GV0h;DEtKN>5Ypzw|{lRm~wM5MJfTB?O!k6M3+-dv;f=sajoNosm z`Fz{c?7-TyaBZ)#pW?qGU}Hy7^Dv!(idtR^Ne27J&jk4N%hZcrEfhgVKm;;Xx$JSM zap467ml0!DV}TpmG!Q3oj?pVOP&TC?!!eK~ewSW!6MF5WjJ1yYR5bWL;WCWI%IPdD zwB%q)#bY%6OMN)170g)Rr)@hOI562q*lk{xWL93dL2ctvT~ixgZtb1*VW%C5iQOMx-tSEp*so_+>{@;ua9PfQsI)pk;%()` zjaw1nSH$4#5Q4J!5OZ@`-BB>wK;l=HNl}735tadf6kvj}Xxz_gyb>W%HpM@aQh~@a z0;XrY^OZ+|PP3xurSl}^9t{-qHkzh-SePe%vgLiXd3U<3;sjWbdM!%%hOmcYfw(=D zyOX~s3F3v5i&Z4VuPDlf5XU+CQXREeC=U$Suc399R?;6#NfJ#5Uh|Mnc}EglzG0qY zj~o8j*Kc(%+N1x~TA?f!8T9Q8Jj#c(V%8^2aA0O{lJWT;YEqy@Y8>Mc_9*Di*OfnB_BT;X_}6I+u1UEIMJ`SnxMh`;LokI zP?sh#nfUB-hShM^sbV0LPD^8#`k3Xv{QJ66@I_SA@+|2w=0qdyRg*T(+zTQr@&Aw5 z>pSktluLBY!b z99*J!?tgRq`T@zGAl39`BC<>J3pYJ0Q^usH3z4dAhgM4clEVbABh`iu!Gp7rT$ zu%-Ovr zYH77jjD4`x0Q3UHyq|6RDgV7-z|P>>JmT&_nH!Wif5IjFwY&_0fOO&2(72Z6JhxB) z>4rzR8BP#NmXjb?P(cq1%toYy)LoIKRrow#-hyZ^Rky#P&GWd9I8>18Xr#55oS|0b zsX!jKXa&50p-mR1Isi zJ3qHqO@Z2&O2Id}fz@_c#e&2QzP~fWmp|zfx03^SK3Hydq&iw3N)wkh_Ke?pPc<2Z zGlL-WkIv92Sx(WcmffQ;C(4Qhn*@Xc;y+U09Si;*B%bdKP_jo(571|I))B^VCo2$M zW}I`I;rpO`b+gfy_%+k@5+`Y25E7uDplpd;Dk~nwY9=XspHgeO2?2O|PYO>Z$8R{> z`@7e7O^#L1VyQQSbe=}h>Ztw-Dn z)X$OVhWjFI`OrP*8NYi_bR@DAE0V5_c$N4L>0S9qCLbPxl?$&6J|*`*XC(P^^V+R@ z{EE$Jr6mlaLhmTPAPn|UHU_j=c_?W-C4B9E3S^Kq<=ynS0Jw-_8~2Q)6ofsQe>|yK ztch>9c9wJx_Do_9iWlNJ*-K0R%PQ=|WNs(J$UU1c1x$g0M3{4N@vq>@y8C)>hP)%l z;L2MoP_f{|pzt&5ykjWpeh8=X2&*_Y#?S>v_kN1yd0Xb@?$|5F6L<}pVTDiuF3vl# z)QSOi2;~DH=&!d~Ad+s-hurVl2mkXH1LE1-f1bx%yt$ITI?O?Dy$YFde$NU$1F%KA zoS_mIgZ<5!%Wg+Yd5+O9YF}JFKkMtnOQ)u)@R_|@Q_4a0)tdVkgONQ66~)m0h&Miw zWC~U@=KM}}B8aBnp5(|=gC>6-1C0y-|h*o##Bmkux zr%du<*tf4P_2AEWH&1@l3I0nE)=WOH$k$g02F%BgDgw%#&yUxt$z{nguah$e`^dxs zc`^7LL;eFu@x9;Czw49zHHXk@lnGsi{rzGI_0s8cZ@}Yv;V~tNeK?*8o~{<^7J(_z z7&}TDt6vt|-9E!bhTS<=q~*<-e24rm!Bq2rtCjop~W^_tKQ1$C0u>B ze4w~K;H{eFDX)4DJ|VWNAof*Uw`t3(UCQHpEgx{YNkxn_*etkmVNDty zaE6A*tmTS?!IxD;Z#UWrPC85wAg7>Cq?6Cs20UL<*)4r_xr*&5)jG5zZ|Aw((+^&y z5wv|%zTgw`EDqhwRKB55R)BdtGwKV<8NT1W}(b> zh-IdC*xR~jIt_PnDrR*g38IhT>S*e7#2&k671WBfyaVs-DG61Gy*}qh&bCe5UulG? zcv*=x$w;tWBU`2l1PQ5xg{wyb;cJbxMzO~Sl6P&Gu!kda0a8J2!=i+wo`3_On-|~lhsQ#Fdu4tY1{!zTL{}#zZFRxK$!R`<=G9 z-f`o3N%rs8JrCHP7&_2&2QGwx5Iwk%bjH5`P<)l`^fO!jWMk7`Z1>n<(@a+G5MwCQ zyoAAH@rzK>`G{*Z2d7aR_f!z6Mpk0;gu3llLme6i;UGc-@>z&o3V|rm-hNdb&lP-^DSL_id-|r3107x}qQ*%>R@69T!p0*b z2hg5uB~gL~(pyz}Rs^o=o)VRCZnA%`dSZ7!Bagl-y+}Jqw1d1R6H7)3c&e(lm2%Y_ z>R0~JWQoHVLYtXy*|hs;*!~#!QSMQgTDhv+%v}=nDZ;&!THbSUby8sV?JJEwHoT;y zg#gMJ_Ii0q%D*AY<1-+6?}K?OdC{mx-DdISMg7-|_mf zjEAY&uu|di#1IHr8T_g04Euf7LZ;dG2X%N7kZsqiI+sA!W}&=1AsL?6Ysz*^#I-oN zPI2bbVmKJo$CmX>7*Tu8O7`xAwZaDd_kTRlvmm70Upnxqd|TpPxjkkw%fwJ&a(3Soy(m$Q1rOOJ7xj{;Btp`3kIaiz1&o8)@>&@W_lnwN)Oe|jR?}IKS^}!>G ze_eKR%tumilr!M)36rfpd%M3E)_?O40l_0nLRlp9_$>w<&6Se}L~uoZ$o(ApC)dQX zm3xQrM|L>kTl6nZI~oUd6n`>_=;sxJ7=Oqq$?Yj?Ad#Ry!5I+)AeEJq(vp>+ff;Z_-f>*lq^AbdncdCkyfOT zDIAdfth>q)`yHLC2o8NfWk^#NXMxNmczQg zSr@xlTe6od52Dn8NW_-p{@grcjC=8S8pKc8{${+;pMbApRd}?d1_vo=m$*qEx1o!4N!T?GyIQb+|!H_7t&0kr2*R zJn)}HgdcHEezNr;e~OF?P5`!d8tSKXq?1|g&z$7oovnxmgh!TXE7F|~7s1KqwIYAG zC!yzW^C3@{CsHNQ#oqh__NYZgA~B!SdSw(U+BC+WuFQ~8%HJGDAb{sVs}lJd1$1Hh z&e&+I2_6ml2!#4Fm_@z>+ucsI!F5~p)eu;2dI1sFpM`65oN}(h(R&C)91$APPb$)koz)vKiNmi;g$(Jx#V>SIwG$JJODNj5Pw(r3sdelPFRPd zjZ>GcQ=fqqtQXcKC?$9j-@DCalL#gMmqsT69qR7dK&V{uq=t#4cS;WpXHAhce}rI8 zs6!G!w;hb`6{VAk)aJ9Xyl(RR*vhwl1^1ng{NH(u1~dWps+t=p3f8cX;dD~-sU4yNb#SAN^gTAKZM2!K7}H^x=UptZizA9Z?~s(j>;BZGAax?Qcu*n7?*MvUs4%e63wDME!?+GqH$PgfuOWHB698=` z-u~0NSITK-XmsP}t6;?-;Olx_?d7t*WyUuV(jbjzaLW?%y5_>(XLl-+e(7+zXW+*G zqo{Q?^vPnWBz%rdrlZaBzbUA`b$xmafiwgzIghE>$_&Nbdm(@0m?x8e%$%Sy=4J-rxycC%t zz*R6)ncf8Q=T!?#073B@y6*m{yZqi9yI3HbZE&_XnfwI?9_z<&6b4NKc^c}?o$(yM zy8_7u!S+sq(oQLd5I3hj=nnwt%?j>s%r*i^!zcY$9;Vc)e6@#i>`%jg6JHW()!q60 z5pLlQ(ENhJnFm4dS4`;8RO>(~+4cf|(bzvW-pKJ+%ip`^=Iob=vS{q%Jtzi}8Yc5c z2){Ih<=gbZpV!dqF35%z5!Kpfew;?-#lTp!i`O`5Rq9UnfP1QR8*$Gg0zz<1Bo$0r z%J+to=^AZBgu^{%8p;=T_JKWTyy=)!7Zt#z_v-w2-DPB(+>UWBLn)I?O->OR0hiD& zL|G&u?zo8lFKr}v#;{1y1IS()_W!zM!`+=*;>-rmyNaS35BVHPG&JWbO$kk~H9d0f3}sw+(o-oF28T5OSs(o93lk0GDGU$O zLvyt+B^9THO8@%&9epDKRqti6zpSP4gC;)wr&K9xoo#c{&oZ)(C=biEQEV1#2E3bf zbCDm^Fg_^-a8ZT+{Z_s3Cd~ws^FA~i<+CQ8!?JbcDkf_uzmOmZ>Wj$f8)lwAaa&>D zNIvVU_h-P(NLvYZZ(A)58D`DPF9&YsB*>r|s+&>?MtB(P&^E0(9_KTA@MWkIi$R5Z z#MoZWhSJmS#Pv;@Q`Y{u>gP>uQf z$mN#LsRQgFa?%RXz(*obr|}i^ZQ$0sJqeNrvG!agAwolJ3n{fp+>Kx5PUi~5t1Z}4 z#GkZHsp(0+Ief_y2YuUkzPeb~{JL17A3ptwS2sySVQy%2_r*hIanzFwg(X+Nfrl~v zeG3|+MY2V-ngG|)=?shs6Xvums3(h0b;r$0LnoEYM_ZA0B6rkk-lt`1fr)0OY>iHh zMAO^K-wM1K6Ud^3d~%Y?pb`D2Es3ZR?phfK0aVy)y#htJ&Z3bVLK7M@EQh^@N!(CF zLw(El(~et473+!vu;#(!X7)@Lr#nR#A-s9}mjqSvSCl$WBk zaPcMNoF5vr3;qs~nd0owWT!1pi*ng-xo-UQ!Y!Pc@a=rP<8&>@*@P2gjgE=^Bf2bt z=1c4{ixGB`{nPj|kLPuU*5#V=sk7@!+dc8++7gX}aTCT`{$60_XEy;ovVBrd?26~S z(n|mb!nW~ln6(Eo`4j|?6R)#ghh9k`AGLHflspJbk1VVwmLYjVoDji`wFtm9|2zjO zM4WsLb=^E`N61W^C@cBE%eLGf!`s050V4~PXpC0y2R753ve1B0Jh3>MlVvvSXLBmA zhy4-YP&yR)`(KbueOYcV`dC$IBKb3EndVGbfQsdU|;bnp=a46 zVQF6W+^Kz4sbwdi>OY#woUg~Pp9ffB({Ml)DSr3-esyN0ZOFMC8u8`o`^})-bJ!l~ z3beC7YVrUtR=9y{;fEBdk7gi-Wn14{xfC-M(b&$ym-_)q9tK%bV>M<^b#yVXhzkE7-Zk#|P zP1KK#B9tnRhYe9vDw#eR2U&^5w7^w0CM$ODS+1v-AE&%K=EfS9fKgpSz198DekJ6> zcXH!ZZ6hs^DE>yk|FRGJ>ss(%37u;{zm?6bl|C{I%`I82FV9jWqX-Q}KTQg~MM&8s z0*CVA1ka3b5c?_nOW@C*xEwhI^lRbz9cDu!zOJpnxIR~J{~lbBX{U5YjAlNHi1LP9 z;zozZ;aG!`YGqBk0!jO6-J>h*SHWau15icvN8k2QCdjiQV$$a$E&KXq&Z$_b+DRBoaq;=p|W9q*d8}zYp~|N7E<$uq*3u zNfc&PTQHP>=1%4dc1>HsG{vA+&~nO|*>Ism0sj-;{-cb(H{2;7w0shA`VoZol(R*` zHp70@{_>b2ZA2|SL{L)!H`lH||+#~iW>l)No;E)){FR#?y4rIiy;SmaI* za)S$Byv#m=uTUz|G+~IbmJh&4>qej(eIT6=&AW;zEJ>oG-va}fm*LXb&&}e2@0^~x zmNt)qS5dR0|9*jy{$|;*mGiZG)Y+}|HD7NuB`mFI*V&D3IJ7gIVa%4U`vMnAWEzhU z8y%X&0$sTIJX-LqbR#Y@WXR7(DyZ6;JeJAu11kqeDY!CyjW1)&E0t3@n4@C6&vQOx z>$?q;4U{mvobdq^ukaF*4m|{Vq4=(v!q0t!z#o&OB-jfDI<>V_Z@%M`-kZq~khStRN= zhriq8UJ4G(lzQ-2?f!q0%h9#hgM6(aE|i9w+Gs(}hSCrHz$swmjTrIQQ%D=MivUx4 z(R*LG?j(XWO{1S2ZVxRm1h9YFNIDc7$87BGqs#Z-KZ^I=$FIE|@s}ROl4J4TV4RPx zhfRE@9-@lWSASZOi#t9bIG?-=S-=5L8YLjOuqy^*dU>iCm~B4+IV1YUETem_KqwQT zj|G049hd{!@FVSkh-^i8HmgICYQQ^hJ^et)&iB;nS$mSObCkPE?WW-O@87GTUIE=^ zyjDMeYikmXt^~Z|F2MW%x8KapQ>8yjq0&1jL^w@a|-dPBvJH zcuz!a(nGkbehA=q``Xru9@L#k9?qYPIZY*lwVjx5qi{v2A2Op207E?9)nB3HS*{-J z-iS=WpL=<>beWpGySBjnI`5u6v^^};=&yR$k(~=+_@~#5Mg+(?h}BX)-=unxu_&+; zYSDmEtvLsyzT-=18STO8ADQzp8D3&s=vT1w%_LQ3y8(e3p z-sk3SC{Qh8g-RwTOZw@>7o=Wwl@TKI)|Yg6v)VMWBT3ED`FKa?7IowE;o}|pt85wm z{cK%yCf0TJ zf{K>J8u0wOVhu%ygh434614aqO*N1OG-~JaF$v=H< zXm@09MAQbD9n91I$YGCcZsxv730w6A4-7H2@TbcPgyb64-1!JY*+em^P7`O z2c4?o(!ce$^S&SbxZ05nhGVjC9JMpIZ68-=(}%$`_L0nE?+m+tcCIbirt6+Gg#vWIkVD;TrTE$gf zFA3_dUIljO>$;P1m*OiYH&=CFItg9!`A88)X!H9Lh#|JpC%-qMewmkd*i-_YG1WE$ z#@jVMDvdUej5%%ng)x*(LR)lA0N#`dh@^B%CI4eh!)RI<1o6= zIh2n?sKE}e;+mE1NwecF*Zp98J_hX`o4BF> zP-z-ISjLL@>E?_vgX8UUb?S&C`^Wk(8Ch8vukV){ABENeRJmk`_$@+F7x4RnsBB%c z;or(Huwn?zmtTS+4^DlGh5cH#2TF3>RXW$et}jdMwZZ&pH>$zw&RO9MB3>~2T_AL- zxJ0@wbs{F*Fn!@}lVU`K6deNCQsYO)UsRC zkP%}Xd_6?nnw0iBEC9_#=VWeRb44Z1kw)V6QB{1xmjHS_$F=ZG6%0dRdP~w^9jF5(JW5|`?2&GS`nU=E)y+|SQGyKs&9fMjhE@0sOd!o_vdS1r(i+jvu`>fL{bTKnNAC??=#7oA_3t? zRHH+B$tk&9T}P6b1ecokv&=;puxl)=2(oIrn}gonHBV(;{mR($J@c%#0_h*zf4UO4 zOB>kJBq?Xg4O6RsBopG^w1olg$i8gTccNEwWPgDu*Tzhqn({cO(07Iih_u-8`?0Ul zXhq5M2oc4g*6I&_D`ISCSJQ_#kz z_iUP*+wu5eG{0q?n+A%s&!xjshzuQw-9LZ%>$s?OyYw&YNQukX1CxZ>j>?_QsG%I5 z2^`wm?TaAym%5Wy>8BhfICHcp(iH~zsw-8*Fqz@!DwBEMmAmU~HVqek#Fa4eKSaa- zZ{ejGFra&D5N3CK4_h@o#m%?Q1};=%(pIm^7s-j{q3WMaK1MExfn>stPI7)uQ3m29_-mcXvfcUU{~$b(jJeY+JGwQI_D#O z79S~nS{b2v?475ls#`0 z0}M)ABUytmu*dm#Lb%4{{?eI(cuI*RFAU6qw3;dPwARX-#?z(6v>fHfvivf9+lgvj zK*SL)f936lH~hb_S^XK>82^=KW7ZfP0U3j7OjssW=-m)_mj?H8o1^9}h zssGDGl!}_(OUb>PNbNK+$FzP}g?8N}cF#m0k!vn}6}Epa6ChDEgpYNbk@v>SFr^Zy z#B206DeelFw;5IDdyTGz>zg+x6$>N5gl9MjS2A_KTftSUKaiE^sOk?ymF5-BoX8eb z1p1_N>v|Yo6>7JI9*YD2rb{Q;iZ#jXil(|T8GI}Z$JPlUeeh6WGE zD;dT)2*Ackpy)*1e|U1P^hBx=l|p`bLMm7V-wn!+`v!CQXs8Q}pD6-zkq3^Nu^I2X zC$U(;XTW&}lvFehTcIehSJevvj?fJMoCU3l_)U%KJg(4Nf zy4m@FhNtY8a4I}$^>6yBtFUX$3fBrXo@%D1g!Nn$^%u|iFqtQK3CUP#^;a$;K|g)_ zlz|qyK4CGzjLero0k=EK23(``i>{yCa`0RTtxSv7eL;0k;C!w?Bk1>Nz-L1_G?hP> zrNe|prAez=a;yfz7c);NxW zX>QVtUE-hI;~!Rn(*O)$5eX06QTdDdgC{K>Q6r<94R_6N?}s`y>BU+Pt=@^A6GqK4 zG*|(p18cls6WmAOd)prA-MXATzNK?(0I&r{>MdWf`@0we406TM!9%}r`-0x!!1Fsm(ev#=AKUK%iB@An3sHhsR`lE>KuKeuXduJb- zXjhMbz_;?>)7miVF6AY%1!t~P>Y@)79AhTmaI5|T$k45B!0)(_vzT=hvB zz32XqTe9cCEVy$2hYKtK60QIjFF67{K;Og7mhp5%Hzk`wBacoM$qq?T7!e_bG-F*y)n#b#>q^4QZ|4z*-K5 z-xDYbXo?+io1LIuDLK9qBJ=vMNEi3vbeFkXb^}qm&-P1AhQGc9E5h$?EGxfi&?51f zs}?%T2iKWVU%Hh^TL8lRk((rW6b?2=FdIUNm-!+1wN!H zrAsx@YQGH{52!hYhXLn=j&?UI_PJCYu_FlH=V|Yq&t|rp*K*Bn)fq3EP`AMoY!5Tb zdyT)MHTz!Y zDd8hiAvoAJEOgq}I<6F%?fj!FG5c+?{2L^!rX!*T9AmWBkh67gs=6?XD)I{RXWhw~ z0g+>Q{n4{DI(C)hfSlTE6skPJCwldBrp2~FoJNn+S9J*SJX7h%{T-&{qH}}E>#|D; z;ivi+e0Q*~Be8`*4H-8XOd?~4rgDG>WJX)hPtWVxAWZRxypKXIPB9etsTLm^ELlN| zy>0qWA9%YTK=3nNBQ@HSu1^%!ftS7wr^E&gJe=&^N)Y0ycSGs{WFCWuOOie;<<^De>PD0n1 zNEBH*OgrxrE~`?9uUDyF%Wrp%?OV??c=~wCyk^%ECrmC**l(U@W@oTX=MyJ6>Msgg?XT%4qM~6Pv|{g?y7fpR6`7P?5R)Y8#D%R~}avylbkl zO0XHfLx!ojpMde+-VaBWXrscdE>(_m4r|Ix_Ix7n{p(jCcZt0pRTIVm6L#!ZeF2a^ zReG|*!vHW#=01DnA{37QJ&K)J7Qt70WBCc8y!LDL>Nn+M1#0Q{x>K-(OSn$1RD;8c zK`dcE=`om-a`H9Co}A4)SqKXt`CYLYnub31ZX(s`%0KX_j`Z`24cpA(eb0Gh ztI~G?Jk2WOn+ew|@IRUHc(TybQ%E9)GXo)o;*XzO12c_N{gYZCM1-ON(tB#I4ZQZI z92E26{nw)soU-2|CY5+O3<%$M!?l`xQM8ovNPJGxICW(EILogXS9OH0%ngh@l7eTaZpapF z@DCjx5L3iVYo{GWr#;yRB)6t-%rQ*Ab zrT(>5D#8*IYM7HN!@ZYiTn^U%G9-F`lpwi{=Jmj0lFU1+c1f$_UcsQSUBn9>yh&SM zrklaT;VZ9aRaRUR!*dp)6 z>7Kjxs68L^^yX$SQ&R11yYR{@R1|U^N=&|Z7SJ@{!6I)wRg4h6oZk4S?D5wYu7M(T37zfo|tv=8q@sOzVGMbIyJKNQk_4h4Wb#TI7 zD_&B}T&&LzAbxczV<-yr`x_8aMnHIxa3vpHcm}W zgpZ80Zf$J!$x(v#nm+F#KAt4xw5KvxD4vrM_kp+LgCNo znQz}U6aVU*zPf|@!hDA6e#Vb2jH^5N)n(w}-a(Jz~(iq6DGG` zFa0-;neF|aT!};ld0dY47AuyNJh4cWG0&H4>W~W0h1GjZW+IehQiEV~=r5mtfjgbpQ%*274(Tr!>d<-MT#JF<7| zdIT-@zgAi?%^A8^0=eHGc1N72?2Sz@4b;9KPj=L4^$}vi)`Bhx;4l>53s<7nsW{d6 zT_dHfzG*%h>vX8mlnb26CNC(X=z2E#gi8kPVA>{Tw6UukXYjQgygsRPI6o!hme%u^ zK>d;-d|rd}d5pk7`Ce`l9FE&4By)_#f!2v+--WF%(pUNQpA3g1|4IA93-=y&K;{o+ z0A=Fr0QYp25aB zb*IVavf`L9&`NpR!+q8L!IRvt$A(Yo&!yb*eL-(Hu$LwZ?{+d;1V{Y-th38aJV+9H zH4kv_dCn$1UX9w2nhTK`uj|K6#3N&W;kXy}^lyb{jDL>CPgH)BE#L|~&cRxc`{BE4 z2jAD7QL8C)I6XA6U%Td_3wuBF@hbcRGcrVL$j(qR2FT(SkCD?0K6b+vJc`1YXc%Oz zrcY8<72(Cqhk2SZ@80M2?IiEJ7A5jS?szK%Z%8WY=X9rZvZolsTplIzj#aK_zojp} zTUNpo^7>&bv)>lk`gA(s={3V%{ZXA^D?^J@{jKAU&B|?WGpzNZ$^4i-@G)x7SNRK) z3jH5HMKqcro|`PZ#$Qez3&lDSB1#$P2ItaB*RiS@`=noB1+;ONzVj+`!WzwlxP4eS zmTBOyc2etoS;Pri6qdSm7481!qch;z=Q)vh9_n#`4L~GtV-Ujd02}qorR4lKql5!l zlnE)d{;Jk2X`8d0&>{b@pGHSi)yL$7!t&UoZ+s^r1^ae*Y>x?1rtXS-#`&6QC^({y z(XKBs`n!>IJbk|IZHb^B_m&}rPq>Z`dO9-}9s5wSmpCc-#aS^%a~w{e); zGMf>mHJvyzq-iay(k9=C{v_n+I2Caw@d6uJ__RL7fLZ%)Js`l#?MZge^H{@fT^k!G zh;xgs?fMKK^}XhOTFvJk2X;hL z#6BVh8F)vk)VKC66lPZ20_#MKO2^Tq)@i{Qgb45Ux7y2_!!gdE2IEc5wn8oCvuvut zI#sPtGA;zif(y5bf`}G=t+b&lX4?O{qp}D%v?_K{wls6%;`PeIoVEuB=QK-?$q4hO zgp=br=UU7jYLu^5>Jl%gzZcpvW8Vmla$9D4WqD;g#zuaS4bT3p^b7~xATcV_Cmhu3 z@UYq5z*0T|Pt$q$j;7iPY5K6LL0Uyg-^b* zHZOka~L;Kj8T3D5~(rOAnuwY9VLgi6-#HpI!0wHw0 z`$EnkBmsrz(=o`Qp>v)oB)vUny9dy+M9tHI35dZNxPN$M3nR_tIT$}qO?b1Q9Abr&T9b#qs^mHm* zY_?R+b*HEKM%--GwFilCx#w!`-9oN!oSa2E;k^E}qP`-XQ86&tx{?HYrtzCS)x=UNfg!1yYmWvWV30jY(7^Fv7wFbN4n6W$*P&6cggwaA@G=#$t=+^D^z=d9qU^E zafVP}3ywy$NG^9^|8RUqn)XKU=^(#g(+QD$g`*`BiO;92%YV~rLI5PPeq0TfCZU#a z#)N(Fmu<>2*5m>S`9-Qq>NQ!dwZTx5FhQr!l@oteq($i{aDN)a5 zS?#J-%4@rS)iqXVTAP-|6hau~pJ$iLg*||SuGa@5MbQ~^O^Zk5g_bl8rXH~3_^f|R zf-`C-gkDgX+_%FK_mWb!NW4GQ+q=~|IjPC)7kI3vqgU1W0V;vFdxOXiH-cHjbba{Q z{(o0qvVG)zVfnx#$(g(1_*Dql+p$j7T;v*BvG|GKo!%kja16r*wZ)T&2|i!^8Fi|7 zneiRHQi#V|9KO_Fcvzgg$f#@ioQT#0hCU$zvRj>8JRJ|yZD zGxVasez+vDC=sbvDU?bJUM|LNY!k8=%do@ns4k~~JriaL8ky5aO@eXMylL%U6ly(x z^(hdKsvE0)VFaebn&ow&?Qz+o`f8y*u^hE=;L>ZlM-co)ROsS!YHp@qobdLPZPkV?I+8gb@gr4KTkAyui}(= zj*_g?gb^pzj)NeiINfm~1zPV>zKET9x+-X0@JWS@jLjB?$X|xaJWQ>%uYVa@j(7Oo z$P1Bb*;&bF|8XK<5y6*)`625`isYohN|Od@W5D;KS5b}`<#TlVTb{^kECeZlv1i@Q z2`G(w$X~^c(J#GUTU=?@s*y7ugDOW#&%=ZTT|^31OHKK2Y*rQaxlP~*J4%tv!F9^Q z7kZlJC`k}g=^1OcV#1c#e-VZ(rm!)cjpTMU<0vvB+7n|D9Uqfrp7|PDb|DW89(mjjtBTZfvOTWMBqyE;7L&HaWA=6>Lq|QWh|jd%g@d5*1l>n zK(evliHzFLI`|NE|Tzc~3+I>s@$)0>E}UTXDE%|UURRYUQzJ__-Kt+FU^ zk)u^9SxQny7gPIDFz5Ad;#;&HIUCK*kZTF6564mQt;<|Ipx^k#FlT&BmWyT{9;U@C z7^1Z*loRD8)!DE0r;#a~`q$PdyJSLNwjN1@A2C+n*56unYIKRgNAbW@@m~Y0jX18O z&qBEoOclHJKF8Ls>{g|iy%>^iy4U|^P39?h%7SJ-@1h{s(`h@ek&E2dfvt*QP${Gc zeRk9gb%QZs?X8=A5Qf|z2~@u;hYOAEWVi2W-OrsO7VBMKT#fut-8oi5_d3tVX`0(w zqGLO6rg@}?V<#Uj;Ayl2*>m7ZGP_@KEvo;jv2JJGvrUo}U-LshgEVn|r4&Aqp0-m& zcIQ43TLe%l>6yHrHL<*o+#P}09~apF(()GMV^P_%S-0_a#)-lUz;xq zuFI##y71Ru%avU`m5g$ki1#@MgD2N7YfZC$77xU5PT0;KaN!oge@rJ~3cbL#SNyT0 zzoJn|wj`a|>IQvgj#XB39sl|vrfc17@(p-S4s8OGXXlWd7QI>%aYPcnUTE8f$IBLr znAXA*=Z2>%LrVogZr2(%0n(0TuKP7Li1+D|8!f0~7GxruvL-5FeKCJPG8l#Bhria~ zR{$S6!1LaCq4=4oEEN|rE42+jSV?Xoe{<%SvZ*DE+s1YZW7>|Ye2)WFGDh%d6p+SG zhcN>`5v@Vs856YZ^QOD!&$pmvev^tCwsiaAA&3*iP(k|x_?V7UuH%2PQ@__7bwGx1 zaA)9Sh*z*3e4mV2ZT60@CPQ8>aDwJORv;eDmfCe}3ksfNUSX;`U0e=i4-zhMN;S;# z&t5a~*~GTL;&Zqb&@NM^f5C3BqxV?(%bW2stNIHc0UugF`{l`I^ZJft&F#jmc%(Y1 zFA6)oVr+tzfc3+0OLDZMul zf(inm_bR=EqJV&e(3`XXp-8{+c+U6TdwzWP*Zp3#BR~f zLZkPWNKzpbAu8P>?d;xJM+h?uA#(4qQgSCFq-I*#^iyH9Ko4#h>8`3W-taJ^?tN;GUq%J`=uV{G1NhIE^GKbYGywb$Zu| zo@FBCQxn+*zL!3xmT;!d_7qXa6oW~k<9bbWHCw@3(J2qWN_KAlz>6hP6lV($3k373 ziKxG#*;FHZAG?z^RP5EQb+ky}>3ZbaIQV$WZJ3o3h>%OMKEWp#dr+&O zf zz_eO8g$)}0fGD5QAn@m(0`dI&@= zokh>q&6c0o8DDN>-feRkH=T4bc`C(;HR?2HYF|IwXI`7wH9TRLO~K7g(IFArND;#`4D&lU+0;E@-R-tuckWCT z$5 z{jU97$FXDp>8n^~sn@xU9)=L7u`dhC%RiTxzn8CKK1t1y_J}}&YzyrHVHp#HIKrlB z!sbr=%6 z>b$8>SNr-YA}SbhW|VprxL<@_BML0>|1sY9e#R4X_(5*jEX{y0>|3itZq|?JqN3&2CihgXeLb!syk>DsFxowEM!`ww1B?m=D+w{P|~-TfmQJ-yZ1DA9j^Do!)?F# zra_q@g$e)DfbuAWGz0~LQJMYV(YQLB8+q_G-2eKBZsAn+`Bh6p=p*7qCcyH1zz_SY zl)J~|F8v2haShZEpxxZ$bglEy4~HCHuLC;QQU!zPo6J1S3=~}kB;dD;pKFN+Yl=Jy zf(FXl&Yjvc%8@Vn6%Bu^@q!&+VJy%V2#?53CKCH^iZ!i~Ub>|w5+~;vk!9|HzUKxo zf|cwWRIgt~;V0N|!IJL%(xfH?C`HL7OJ)SnlokTfYbi;jCx-bkm9n>LnN`(bTe{An zpQ^MeWzBs)&UhzmnHDd)3It?FIn zz*mIVYn0^u*x=N!ZTNP*j$56ye}Nj?B?j%Bzs6nu(pDk^FZ*hKdST+TR%aQ1RP-W_ z*7dzkd8qfPQh|gV70u+r2TDE?fV3KxUR!t2xg8#*3D=-;W#z(Frx9lDE$0(H;!n@} zq*=8grI^(WU}wmbiYa7*hb^=)qFdWc>N?cyi z3b4ZQYvkk(w0x=hv#T(bysxG7(EbWA52=Of!rR{sFT}rPcRGWCE0tM)Y4tljpy=a# z)g*LIA7W=5&;WDbY*ZrZ@ClvFjO8u9wp6}X& z1t_VnH+c=!Etu~l=fH2(I-hxnP3Dgo?hlEyWt`dwT0i7$+*24Pxft=POj$pzp9?HN zJ5zmcvXB1w@eAK<@>kmk&2I=pGV^M_nG6zXsl)uWmE2ILsiD=e+PscPQ$Nq-qivDc z{-r>5FJY+X7pqwMDvyhK1?E0%lzD0dMSLRIGSgM~kvp~4t2y=DpR~kIu^HF^56>$% zj8s4J0^I)r4%7_SGxX%+_wMPv{K{|u84&4D79x<*D_ecw7`TQzI-e4dZ?GpNDVh<& zlzUISZ%3kmu?oXp+zb{7{u{3-*4MjJBv<=8$z5_ZI#3Y<{L2F}{ zT!1)8*BB-$`P=B?e1&t)(_^u{!9!Vef%ZkOKgaFatFQ8_;i@9h1J`ja7ET9-*rh^x zTcyz8YQGs${e|hp)1gaF;y3<|Ba9Dku$oGyWQoMj++{!=SM>XO9MJb};{p_?YDs-) zCMIvQ0VaheT*BaDR;0&!aK>ttl@gO=;C9o?UOoAqk+nJDbW^q*M<={V#@(0OykIri z5*;8aRUYi~_39dD1yU71!16=0cqQ50X^F5i!EU+hr5ZBEfej>h{0*W?->Jt{`LNy^ z=pIUkos-?$NyitP5Y_O)&-AVQXYLNtxA`Vnx!Mq#YuU7wKKKK@iyI0fI%lG@Zr`TJ zz3aD1v$Gy-h4o-oMND|9XD@e=8<1zTZ_3|^-JFjiX?7O5dwiY##r(4cfc^I`>TuFU z-YIEdKS2l2Om@vgaHFr~%$ZAtK||q-0E2WT(#UnacXL91ceAlTl2EAVa`$2xg~A|8 zO%W?x!Dwz}R2DqwW=9}DoShy;O1C+V@!mLHhS1%aFwx5(H!fx|)1NN9i333Hr67p6 zPRI3^RGVz-F-ZjJ)TkU zVDOPDtD~C)+`<+I7jbsX%zojLpF&anfZb`njOYUXCyCTn-sb#c4Gmc8CL6}wj- zvfM;3;)f&4xT#7+9~6^SiFoq0X635LZkF86cb;?x4C0rE`LI>0CQ!;OQ)ixcb}N1V zT3^;Pl)}j8+`iU5qGd0fc{%+sQ`Fif%G$1A66@J5gzTll%^1Q{h??u>Fl65Sbs<_+`CCjfAHjx><7KZ? zge;Y62&04xahrfIaFs&l(#oWSnK{P8fSh0mgJyL`euMJ!7Hi)|IwEacqAM^Er*DXC7{d&yU$dkOk%n zg7X)v41?5VD1!Y9n>IpB>(=c8`_EYg>B|x$5YhZ?kr;%f-oTosmqOne&hee%iPe5w zL!cuIoB3u6lDjC1=LI_CR+kZRRA|qs6q6BQh9-3wN=KuXGH@>0*NcCnCDezAe?snt zxlx~-(w;pBDC=F6Z<`11wW10e*yzWyBgGPWaenB9OYam$j!?WvtGQY@vt@NQn`P9H z0g!~m)G@<~n%|>JsmyXgxE1b8mR03VUyDrZwWoTbvP8byZY9+*5LJfl?_lQ9EMCTq zHu)qI{*cm8tz0W99ocxS@05Xf2)i%ObNiuzw-g&^v`R=>Wi{;bxuE{n-<&9QEb+5!1^iTL35S29&uAaI zKUq$>Qw%OQ+D!Y@OQg`NQ#D{8>Q_8j=$axPIK^XX)P%8Rxz`clBbG+X{ncxny(L}9 zT(}W2KJ5Vin4i`P{JKXp`t7s9YLb6!L5_wh-yQ46fHTs8>)X+^_+FMM2 z_!G*daV}YrWXl*w;0o$;GcRcixT3LLBnRJn-&A2$`4mMDWlSMN8agH<*Bfc?Ji7nd zyXXM&BCpp!GhVK4c^)zpw}i>3j|MG<~ppWjhe#k|~Imbx*#yW7pJZW;V@mI?Wqc>HB#BCZq z`KRe_qlE$Kb(Ko*P-$Cb)6XqX=6R2`-MNB|DeI52gsx1hdJW`cbs_FfWSdO#uxG{| zL^?v%@K^2q7wl|SAsp(WcJ1tzulTmm0=hsyIDMvz^uj|s^)L<-)F3UX1kCE$?! zE_Ncn$YsDHZA+X+6#b+;afHt`WoB+rGn2JK{uVI*&=N60gb){nC18%Gcvh&UxngCF zjE+^#(xo-=qi+}DI>FN;;cb_d+GS`tRD;jG3u?2*#2vhng4WQ5+oy6~k80+T_6rDZ zUGei(v_`$!LZ>eX&z)G;oto%j$XH`meHO@L_X1v$l@5sioH4Zf&DEBZOFM`WCe0bY3K~%%LiOdsCgltTQuv5K}y^=+O0!h)1^o7;1NWiFia8#)0 zsKfU_Vu;0|awJqk7WPI9nYR)Y1YmP=Yu@rGkOD(uQOGlP=>^NWT9-GV2L4FL%*MX8wBO>8InA7X^li2#KMr zTrIIEVX*?Nirj~pvg)tfaw@7>R}_}DaB z^O(+Y_B`eQoFeg?Ke6Y2>EA56yKZ94zFaabtl2g#*cR{xIMh1Dn*~ly(}Qlbsx7g% zhd<({1IgrpL?;M(J2`YnkNT5I&(<_!AK2%4SKrMyTGG&4X|K}z;6G3+4tYc<0YW)2 zq%Zl?4|WIR8`*jRzI~&_oi_M=l25*5Ugl2`aCa?8Rw2iYS zT8J1nrKA*_X$b6qO^%8TA2>-)>pQX378n!}+QVdJ1d`3M(S?MC@jKQGe~#WiQAz{P z%)`OHzWVE*y<+>G|D`KnJI={~Ru%%V=+~`BL0_}Y8(tO)Dw5=Vn`16Un=0g z1kK+r`UUX}SnP~~DkT36y1z01Z|4LfY{fi!MKZqs+$3z63)FM($sv)m@?X;9Z!P_G z>v$7e(PXb0@;{`&-`?-nc>U)U{{wCQpMJ$Fszto|cX#LNi*T@q`h9JcG9{~!{{lD* BoGJhS literal 0 HcmV?d00001 diff --git a/docs/reference/client-script-usage.md b/docs/reference/client-script-usage.md index ca817b5e..27190889 100644 --- a/docs/reference/client-script-usage.md +++ b/docs/reference/client-script-usage.md @@ -28,7 +28,7 @@ The script takes a limited number of mandatory arguments. However, Sigrid CI's b | `--system` | Yes | examplesystemname | Name of your system in Sigrid. Contact SIG support if you are not sure about this. [2] | | `--subsystem ` | No | frontend | Used to map between repository directory structure versus the one known by Sigrid. [5] | | `--source` | No | . | Path of your project's source code. Use "." for current directory. | -| `--capability` | No | maintainability | Comma-separated list of Sigrid capabilities (`maintainability,osh`). Default is maintainability. | +| `--capability` | No | maintainability | Comma-separated list of Sigrid capabilities (`maintainability,osh,security`). Default is maintainability. | | `--publish` | No | N/A | Automatically publishes analysis results to Sigrid. [1] | | `--publishonly` | No | N/A | Publishes analysis results to Sigrid, but *does not* provide feedback in the CI environment itself. [3] | | `--exclude` | No | /build/,.png | Comma-separated list of file and/or directory names that should be excluded from the upload. [4, 7] | diff --git a/docs/sigridci-integration/using-sigridci.md b/docs/sigridci-integration/using-sigridci.md index 7b0178c2..0d630e82 100644 --- a/docs/sigridci-integration/using-sigridci.md +++ b/docs/sigridci-integration/using-sigridci.md @@ -98,6 +98,37 @@ Sigrid CI separates vulnerable open source libraries into two categories: line `message-path: sigrid-ci-output/feedback.md`, and change this to `message-path: sigrid-ci-output/*feedback.md`. Adding the asterisk allows you to get feedback on *all* Sigrid capabilities, not just maintainability. +### Security feedback (Beta) + +Sigrid CI provides security feedback based on your [objectives](../capabilities/portfolio-objectives.md). +As with [open source vulnerabilities](#open-source-health-feedback-beta), you do need to fix every single +security finding that does not meet your objective. + + + +When you encounter security findings during code reviews, there are three ways how you can deal with them: + +- **Address the finding in the pull request:** It's always the best course of action to just address the finding + within the pull request. This prevents the finding from ever going into the main/master branch, which is generally + considered a best practice in [shift-left thinking](https://en.wikipedia.org/wiki/Shift-left_testing). +- **Merge the pull request, manage the finding via Sigrid:** In some cases, the pull request author and reviewer might + agree it's not feasible to address the finding right now. In those situations, it's OK to merge the pull request. + This will cause the security finding to appear in Sigrid's + [Security dashboard](../capabilities/portfolio-security.md), where it can be tracked. +- **Merge the pull request, mark the finding as a false positive in Sigrid:** Like any automated check, Sigrid can + produce findings that are false positives. In those situations, if the pull request author and reviewer agree the + finding is *actually* a false positive, it's OK to merge the pull request. You can then mark the finding as a false + positive in Sigrid's [security page](../capabilities/system-security.md). False positives are automatically excluded + from future Sigrid CI feedback. + +#### Adding Security feedback to an existing Sigrid CI configuration + +- **All platforms:** You need to add the option `--capability maintainability,osh,security` to the Sigrid CI step in + your pipeline configuration. +- **GitHub:** In addition to the above, you need one extra step: In your pipeline configuration, look for the + line `message-path: sigrid-ci-output/feedback.md`, and change this to `message-path: sigrid-ci-output/*feedback.md`. + Adding the asterisk allows you to get feedback on *all* Sigrid capabilities, not just maintainability. + ## How do you deal with feedback from Sigrid CI? Feedback from Sigrid CI is intended to be used in the context of a diff --git a/sigridci/sigridci.py b/sigridci/sigridci.py index 26a0c230..a3aabbbd 100755 --- a/sigridci/sigridci.py +++ b/sigridci/sigridci.py @@ -18,7 +18,7 @@ import sys from argparse import ArgumentParser, SUPPRESS -from sigridci.capability import MAINTAINABILITY, OPEN_SOURCE_HEALTH +from sigridci.capability import CAPABILITY_SHORT_NAMES from sigridci.publish_options import PublishOptions, RunMode from sigridci.sigrid_api_client import SigridApiClient from sigridci.platform import Platform @@ -26,9 +26,6 @@ from sigridci.upload_log import UploadLog -CAPABILITIES = {cap.shortName: cap for cap in [MAINTAINABILITY, OPEN_SOURCE_HEALTH]} - - def parsePublishOptions(args): return PublishOptions( partner=args.partner.lower(), @@ -66,7 +63,7 @@ def parseTarget(target): def parseCapabilities(names): try: - return [CAPABILITIES[name.lower().strip()] for name in names.split(",")] + return [CAPABILITY_SHORT_NAMES[name.lower().strip()] for name in names.split(",")] except KeyError as e: print(f"Invalid value for --capability: {str(e)}") sys.exit(1) @@ -81,7 +78,8 @@ def parseCapabilities(names): parser.add_argument("--subsystem", type=str, default="", help="Publishes your code as a subsystem within a Sigrid system.") parser.add_argument("--convert", type=str, default="", help="Code conversion for specific technologies") parser.add_argument("--source", type=str, required=True, help="Path of your project's source code.") - parser.add_argument("--capability", type=str, default="maintainability", help=f"Comma-separated Sigrid capabilities ({','.join(CAPABILITIES.keys())}).") + parser.add_argument("--capability", type=str, default="maintainability", + help=f"Comma-separated Sigrid capabilities ({','.join(CAPABILITY_SHORT_NAMES.keys())}).") parser.add_argument("--publish", action="store_true", help="Publishes analysis results to Sigrid.") parser.add_argument("--publishonly", action="store_true", help="Only publishes to Sigrid without waiting for results.") parser.add_argument("--exclude", type=str, default="", help="Comma-separated list of files/directories to exclude.") diff --git a/sigridci/sigridci/capability.py b/sigridci/sigridci/capability.py index 67cf09de..92707245 100644 --- a/sigridci/sigridci/capability.py +++ b/sigridci/sigridci/capability.py @@ -26,3 +26,5 @@ class Capability: MAINTAINABILITY = Capability("MAINTAINABILITY", "Maintainability", "maintainability", 2) OPEN_SOURCE_HEALTH = Capability("OPEN_SOURCE_HEALTH", "Open Source Health", "osh", 4) SECURITY = Capability("SECURITY", "Security", "security", 8) + +CAPABILITY_SHORT_NAMES = {cap.shortName: cap for cap in [MAINTAINABILITY, OPEN_SOURCE_HEALTH, SECURITY]} diff --git a/sigridci/sigridci_feedback.py b/sigridci/sigridci_feedback.py index 27d8df23..43c79769 100755 --- a/sigridci/sigridci_feedback.py +++ b/sigridci/sigridci_feedback.py @@ -18,13 +18,11 @@ import sys from argparse import ArgumentParser, SUPPRESS -from sigridci.capability import MAINTAINABILITY, OPEN_SOURCE_HEALTH, SECURITY +from sigridci.capability import CAPABILITY_SHORT_NAMES from sigridci.feedback_provider import FeedbackProvider -from sigridci.publish_options import PublishOptions, RunMode, Capability +from sigridci.publish_options import PublishOptions, RunMode from sigridci.sigrid_api_client import SigridApiClient -CAPABILITIES = {cap.shortName: cap for cap in [MAINTAINABILITY, OPEN_SOURCE_HEALTH, SECURITY]} - def parseFeedbackOptions(args): options = PublishOptions( @@ -32,7 +30,7 @@ def parseFeedbackOptions(args): customer=args.customer, system=args.system, runMode=RunMode.FEEDBACK_ONLY, - capabilities=[CAPABILITIES[args.capability.lower()]], + capabilities=[CAPABILITY_SHORT_NAMES[args.capability.lower()]], outputDir=args.out, sigridURL=args.sigridurl ) @@ -58,7 +56,7 @@ def determineObjectives(options): parser.add_argument("--system", type=str, required=True, help="Name of your system in Sigrid, letters/digits/hyphens only.") parser.add_argument("--out", type=str, default="sigrid-ci-output", help="Output directory for Sigrid CI feedback.") parser.add_argument("--sigridurl", type=str, default="https://sigrid-says.com", help="Sigrid base URL.") - parser.add_argument("--capability", type=str, required=True, choices=list(CAPABILITIES.keys())) + parser.add_argument("--capability", type=str, required=True, choices=list(CAPABILITY_SHORT_NAMES.keys())) parser.add_argument("--analysisresults", type=str, required=True, help="Analysis results JSON file.") parser.add_argument("--previousresults", type=str, help="Baseline analysis results JSON file used for comparison.") args = parser.parse_args() @@ -66,7 +64,7 @@ def determineObjectives(options): options = parseFeedbackOptions(args) objectives = determineObjectives(options) - feedbackProvider = FeedbackProvider(CAPABILITIES[args.capability], options, objectives) + feedbackProvider = FeedbackProvider(CAPABILITY_SHORT_NAMES[args.capability], options, objectives) feedbackProvider.loadLocalAnalysisResults(args.analysisresults) if args.previousresults: feedbackProvider.loadPreviousAnalysisResults(args.previousresults) From f9982c0589434ab9b818800668989045fb1c3c89 Mon Sep 17 00:00:00 2001 From: Dennis Bijlsma Date: Tue, 18 Nov 2025 16:43:30 +0100 Subject: [PATCH 2/6] Security feedback in both Markdown and text form. --- .../analysisresults/sarif_processor.py | 60 + sigridci/sigridci/feedback_provider.py | 3 + .../reports/security_markdown_report.py | 1 - .../sigridci/reports/security_text_report.py | 40 + test/test_sarif_processor.py | 46 + test/test_security_markdown_report.py | 2 +- test/test_security_text_report.py | 44 + .../{security.json => security.sarif.json} | 0 test/testdata/security.sig.json | 2690 +++++++++++++++++ 9 files changed, 2884 insertions(+), 2 deletions(-) create mode 100644 sigridci/sigridci/analysisresults/sarif_processor.py create mode 100644 sigridci/sigridci/reports/security_text_report.py create mode 100644 test/test_sarif_processor.py create mode 100644 test/test_security_text_report.py rename test/testdata/{security.json => security.sarif.json} (100%) create mode 100644 test/testdata/security.sig.json diff --git a/sigridci/sigridci/analysisresults/sarif_processor.py b/sigridci/sigridci/analysisresults/sarif_processor.py new file mode 100644 index 00000000..0c664fcb --- /dev/null +++ b/sigridci/sigridci/analysisresults/sarif_processor.py @@ -0,0 +1,60 @@ +# Copyright Software Improvement Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from dataclasses import dataclass + +from ..objective import Objective + + +@dataclass +class Finding: + fingerprint: str + risk: str + description: str + file: str + line: int + + +class SarifProcessor: + def extractRelevantFindings(self, feedback, objective): + if feedback is None: + return [] + findings = list(self.extractAllFindings(feedback)) + return [finding for finding in findings if Objective.isFindingIncluded(finding.risk, objective)] + + def extractAllFindings(self, feedback): + rules = list(self.getRules(feedback)) + + for run in feedback["runs"]: + for result in run.get("results", []): + fingerprint = result["fingerprints"]["sigFingerprint/v1"] + risk = self.getFindingSeverity(result, rules) + file = result["locations"][0]["physicalLocation"]["artifactLocation"]["uri"] + line = result["locations"][0]["physicalLocation"]["region"]["startLine"] + yield Finding(fingerprint, risk, result["message"]["text"], file, line) + + def getRules(self, feedback): + for run in feedback["runs"]: + for rule in run.get("rules", []): + properties = rule.get("properties", {}) + if properties.get("severity"): + yield rule + + def getFindingSeverity(self, result, rules): + severity = result.get("properties", {}).get("severity") + if not severity: + for rule in rules: + if rule["id"] == result["ruleId"]: + severity = rule["properties"]["severity"].replace("ERROR", "HIGH").replace("WARNING", "MEDIUM") + return severity.upper() if severity else "UNKNOWN" diff --git a/sigridci/sigridci/feedback_provider.py b/sigridci/sigridci/feedback_provider.py index cffa894d..c88d3274 100644 --- a/sigridci/sigridci/feedback_provider.py +++ b/sigridci/sigridci/feedback_provider.py @@ -26,6 +26,7 @@ from .reports.osh_text_report import OpenSourceHealthTextReport from .reports.pipeline_summary_report import PipelineSummaryReport from .reports.security_markdown_report import SecurityMarkdownReport +from .reports.security_text_report import SecurityTextReport from .reports.static_html_report import StaticHtmlReport @@ -96,5 +97,7 @@ def prepareAdditionalReports(self, markdownReport): reports += [AsciiArtReport(), JUnitFormatReport(), StaticHtmlReport(self.objective)] elif self.capability == OPEN_SOURCE_HEALTH: reports += [OpenSourceHealthTextReport(self.objective)] + elif self.capability == SECURITY: + reports += [SecurityTextReport(self.objective)] reports.append(PipelineSummaryReport(markdownReport)) return reports diff --git a/sigridci/sigridci/reports/security_markdown_report.py b/sigridci/sigridci/reports/security_markdown_report.py index 8ee1223f..d53feeda 100644 --- a/sigridci/sigridci/reports/security_markdown_report.py +++ b/sigridci/sigridci/reports/security_markdown_report.py @@ -73,7 +73,6 @@ def generateFindingsTable(self, findings, rules, options): for finding in findings[0:self.MAX_FINDINGS]: symbol = self.SEVERITY_SYMBOLS[self.getFindingSeverity(finding, rules)] - file = finding["locations"][0]["physicalLocation"]["artifactLocation"]["uri"] line = finding["locations"][0]["physicalLocation"]["region"]["startLine"] link = self.decorateLink(options, f"{file}:{line}", file, line) description = finding["message"]["text"] diff --git a/sigridci/sigridci/reports/security_text_report.py b/sigridci/sigridci/reports/security_text_report.py new file mode 100644 index 00000000..8441c64d --- /dev/null +++ b/sigridci/sigridci/reports/security_text_report.py @@ -0,0 +1,40 @@ +# Copyright Software Improvement Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys + +from .report import Report +from .security_markdown_report import SecurityMarkdownReport +from ..analysisresults.sarif_processor import SarifProcessor + + +class SecurityTextReport(Report): + + def __init__(self, objective, *, output=sys.stdout): + self.output = output + self.objective = objective + + def generate(self, analysisId, feedback, options): + processor = SarifProcessor() + findings = list(processor.extractRelevantFindings(feedback, self.objective)) + + if len(findings) > 0: + print("", file=self.output) + print("Security findings", file=self.output) + print("", file=self.output) + for finding in findings: + symbol = SecurityMarkdownReport.SEVERITY_SYMBOLS[finding.risk] + print(f" {symbol} {finding.description}", file=self.output) + print(f" In {finding.file} (line {finding.line})", file=self.output) + print("", file=self.output) diff --git a/test/test_sarif_processor.py b/test/test_sarif_processor.py new file mode 100644 index 00000000..4d918021 --- /dev/null +++ b/test/test_sarif_processor.py @@ -0,0 +1,46 @@ +# Copyright Software Improvement Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import os +from unittest import TestCase + +from sigridci.sigridci.analysisresults.sarif_processor import SarifProcessor + + +class SarifProcessorTest(TestCase): + + def testExtractAllFindings(self): + with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: + feedback = json.load(f) + + processor = SarifProcessor() + findings = list(processor.extractAllFindings(feedback)) + + self.assertEqual(len(findings), 2) + self.assertEqual(findings[0].risk, "CRITICAL") + self.assertEqual(findings[0].description, "Weak Hash algorithm used") + self.assertEqual(findings[1].risk, "MEDIUM") + self.assertEqual(findings[1].description, "Some other finding") + + def testExtractRelevantFindings(self): + with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: + feedback = json.load(f) + + processor = SarifProcessor() + findings = list(processor.extractRelevantFindings(feedback, "HIGH")) + + self.assertEqual(len(findings), 1) + self.assertEqual(findings[0].risk, "CRITICAL") + self.assertEqual(findings[0].description, "Weak Hash algorithm used") diff --git a/test/test_security_markdown_report.py b/test/test_security_markdown_report.py index d861e0ae..82e9e9d1 100644 --- a/test/test_security_markdown_report.py +++ b/test/test_security_markdown_report.py @@ -27,7 +27,7 @@ class SecurityMarkdownReportTest(TestCase): def setUp(self): self.options = PublishOptions("aap", "noot", RunMode.FEEDBACK_ONLY, sourceDir="/tmp", feedbackURL="") - with open(os.path.dirname(__file__) + "/testdata/security.json", encoding="utf-8", mode="r") as f: + with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: self.feedback = json.load(f) @mock.patch.dict(os.environ, { diff --git a/test/test_security_text_report.py b/test/test_security_text_report.py new file mode 100644 index 00000000..391993aa --- /dev/null +++ b/test/test_security_text_report.py @@ -0,0 +1,44 @@ +# Copyright Software Improvement Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import inspect +import json +import os +from io import StringIO +from unittest import TestCase + +from sigridci.sigridci.publish_options import PublishOptions, RunMode +from sigridci.sigridci.reports.security_text_report import SecurityTextReport + + +class SecurityTextReportTest(TestCase): + + def testPrintFindings(self): + options = PublishOptions("aap", "noot", RunMode.FEEDBACK_ONLY, sourceDir="/aap", feedbackURL="") + + with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: + feedback = json.load(f) + + buffer = StringIO() + report = SecurityTextReport("HIGH", output=buffer) + report.generate("1234", feedback, options) + + expected = """ + Security findings + + 🟣 Weak Hash algorithm used + In Security.java (line 33) + """ + + self.assertEqual(inspect.cleandoc(expected), buffer.getvalue().strip()) diff --git a/test/testdata/security.json b/test/testdata/security.sarif.json similarity index 100% rename from test/testdata/security.json rename to test/testdata/security.sarif.json diff --git a/test/testdata/security.sig.json b/test/testdata/security.sig.json new file mode 100644 index 00000000..ba98a6ca --- /dev/null +++ b/test/testdata/security.sig.json @@ -0,0 +1,2690 @@ +[ + { + "id": "0006d9dd-5288-424a-bf8b-077c98ef00ee", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0006d9dd-5288-424a-bf8b-077c98ef00ee", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", + "startLine": 853, + "endLine": 855, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "050d2de2-db7f-4ce7-8bde-176bc50d0b3a", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/050d2de2-db7f-4ce7-8bde-176bc50d0b3a", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", + "startLine": 867, + "endLine": 869, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "07caaeb7-83f1-45db-bf8e-91384bcae54c", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/07caaeb7-83f1-45db-bf8e-91384bcae54c", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", + "startLine": 847, + "endLine": 849, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "0b831862-ea1f-426c-9a9b-daeec885d72f", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0b831862-ea1f-426c-9a9b-daeec885d72f", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", + "startLine": 897, + "endLine": 899, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "0e617f61-2b9f-4d67-8219-8ac70e3ae6f3", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0e617f61-2b9f-4d67-8219-8ac70e3ae6f3", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/NavigateTo.js", + "startLine": 68, + "endLine": 68, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `url` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "0edd0d1b-35f5-467b-8597-798c35334aad", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0edd0d1b-35f5-467b-8597-798c35334aad", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "projectsettings/ProjectSecurity.mx.json", + "startLine": 4, + "endLine": 4, + "component": "projectsettings", + "type": "The default Administrator password should be changed", + "cweId": "CWE-1188", + "severity": "HIGH", + "impact": "CRITICAL", + "exploitability": "HIGH", + "severityScore": 8.9, + "impactScore": 5.4, + "exploitabilityScore": 3.5, + "status": "RAW", + "remark": null, + "toolName": "SIG Mendix Security", + "ruleId": "mendix-security.project-security.project-security-admin-password", + "weaknessIds": [ + "CWE-1188" + ], + "categories": [ + "Other" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "0fb8da48-8314-4fa0-916d-2de6d8e66f63", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0fb8da48-8314-4fa0-916d-2de6d8e66f63", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", + "startLine": 881, + "endLine": 883, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "139641f4-1330-40cf-91a4-c186c831e498", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/139641f4-1330-40cf-91a4-c186c831e498", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", + "startLine": 59, + "endLine": 59, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `subject` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "139dbe74-e4c9-4f3e-82c8-942df2ee9541", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/139dbe74-e4c9-4f3e-82c8-942df2ee9541", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", + "startLine": 793, + "endLine": 795, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "15072d67-48b0-41cd-9602-b776a107e71f", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/15072d67-48b0-41cd-9602-b776a107e71f", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestDocument.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "1679c4ee-a958-4670-8167-b0a4bfc945f8", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/1679c4ee-a958-4670-8167-b0a4bfc945f8", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestWriteFile.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "171575af-9876-4edd-9229-f2a8131f4846", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/171575af-9876-4edd-9229-f2a8131f4846", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", + "startLine": 847, + "endLine": 849, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "1d6ee2dc-f79f-4cfb-9d05-2dd653d16e50", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/1d6ee2dc-f79f-4cfb-9d05-2dd653d16e50", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", + "startLine": 793, + "endLine": 795, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "1f87aed0-036c-4824-bce3-44eea3467d94", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/1f87aed0-036c-4824-bce3-44eea3467d94", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", + "startLine": 867, + "endLine": 869, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "2032e939-efa0-43f0-9735-b8b86e0630cb", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/2032e939-efa0-43f0-9735-b8b86e0630cb", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/NavigateTo.js", + "startLine": 57, + "endLine": 57, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `location` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "25bc5090-fd30-41e5-8db2-8372b85e4f22", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/25bc5090-fd30-41e5-8db2-8372b85e4f22", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", + "startLine": 867, + "endLine": 869, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "276d9c16-da3a-40fe-bd3b-edf4e547855a", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/276d9c16-da3a-40fe-bd3b-edf4e547855a", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", + "startLine": 881, + "endLine": 883, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "27c54c9f-31c4-400e-aa61-9d6426e9b710", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/27c54c9f-31c4-400e-aa61-9d6426e9b710", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javasource/_communitycommons/Misc.java", + "startLine": 460, + "endLine": 460, + "component": "javasource/_communitycommons", + "type": "\"InterruptedException\" should not be ignored", + "cweId": "CWE-391", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 6.9, + "impactScore": 3.5, + "exploitabilityScore": 3.4, + "status": "RAW", + "remark": null, + "toolName": "SonarQube (Java)", + "ruleId": "S2142", + "weaknessIds": [ + "CWE-391" + ], + "categories": [ + "Other" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "2cb90288-c8b8-4f11-be11-2f22c24428ee", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/2cb90288-c8b8-4f11-be11-2f22c24428ee", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/SendTextMessage.js", + "startLine": 41, + "endLine": 41, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `phoneNumber` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "322cd5d8-a19f-4b39-a2a3-a0382bd35800", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/322cd5d8-a19f-4b39-a2a3-a0382bd35800", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/CallPhoneNumber.js", + "startLine": 41, + "endLine": 41, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `phoneNumber` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "390f4064-7965-495e-bf9e-a42d4c8aa060", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/390f4064-7965-495e-bf9e-a42d4c8aa060", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", + "startLine": 833, + "endLine": 835, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "392065e6-01dd-43cc-92dd-35bc13f20bcf", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/392065e6-01dd-43cc-92dd-35bc13f20bcf", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", + "startLine": 1055, + "endLine": 1057, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "3d37d95d-eed9-4204-987c-b3741b7bdeb8", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/3d37d95d-eed9-4204-987c-b3741b7bdeb8", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", + "startLine": 897, + "endLine": 899, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "3f137c52-4d05-477a-b3df-7a12cf7cb7e9", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/3f137c52-4d05-477a-b3df-7a12cf7cb7e9", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", + "startLine": 819, + "endLine": 821, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "4a39bd83-4f1f-4cda-8638-339e315b8226", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/4a39bd83-4f1f-4cda-8638-339e315b8226", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", + "startLine": 819, + "endLine": 821, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "4bc65b9f-f2e7-43b4-af03-47d706dfdda1", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/4bc65b9f-f2e7-43b4-af03-47d706dfdda1", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", + "startLine": 819, + "endLine": 821, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "593c52b5-9875-4fcc-98f6-ecc5f6924c85", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/593c52b5-9875-4fcc-98f6-ecc5f6924c85", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestMessage.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "598893a3-9459-491a-a399-5eb52ee2f317", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/598893a3-9459-491a-a399-5eb52ee2f317", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", + "startLine": 59, + "endLine": 59, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `body` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "5b0664b9-776d-47d2-91cf-c78c43ad6ce1", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/5b0664b9-776d-47d2-91cf-c78c43ad6ce1", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", + "startLine": 59, + "endLine": 59, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `recipient` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "5bcb5e23-f7d6-411c-9bed-d2509228cd9f", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/5bcb5e23-f7d6-411c-9bed-d2509228cd9f", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", + "startLine": 1055, + "endLine": 1057, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "63e9a99b-bb6e-4914-9c8e-36097fa9b097", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/63e9a99b-bb6e-4914-9c8e-36097fa9b097", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/OpenMap.js", + "startLine": 57, + "endLine": 57, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `location` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "7145cef2-56d0-467f-a12e-74de1708892a", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/7145cef2-56d0-467f-a12e-74de1708892a", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", + "startLine": 931, + "endLine": 933, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "73a2a457-2bc5-4d0b-9d37-4b4963a43f70", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/73a2a457-2bc5-4d0b-9d37-4b4963a43f70", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", + "startLine": 827, + "endLine": 829, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "76298a11-e220-4599-abca-3ed69d748613", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/76298a11-e220-4599-abca-3ed69d748613", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", + "startLine": 827, + "endLine": 829, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "77984d01-6c31-48f0-bb33-74ce99a8105d", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/77984d01-6c31-48f0-bb33-74ce99a8105d", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "NativeFileDocuments/domainmodel/DeviceLogFile.mx.json", + "startLine": 76, + "endLine": 146, + "component": "NativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "7d8f22aa-1db4-4000-8be1-f182dd917ffc", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/7d8f22aa-1db4-4000-8be1-f182dd917ffc", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "projectsettings/ProjectSecurity.mx.json", + "startLine": 30, + "endLine": 30, + "component": "projectsettings", + "type": "Demo users should be disabled in Project Security settings", + "cweId": "CWE-288", + "severity": "HIGH", + "impact": "HIGH", + "exploitability": "HIGH", + "severityScore": 7.9, + "impactScore": 4.5, + "exploitabilityScore": 3.4, + "status": "RAW", + "remark": null, + "toolName": "SIG Mendix Security", + "ruleId": "mendix-security.project-security.project-security-demousers", + "weaknessIds": [ + "CWE-288" + ], + "categories": [ + "A7 Identification and Authentication Failures" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "81f0fafc-ff0c-4a2c-937b-c77d5a011d76", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/81f0fafc-ff0c-4a2c-937b-c77d5a011d76", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestZip.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "8325f7cb-bf8a-4b79-b2a6-b32eb49d129d", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8325f7cb-bf8a-4b79-b2a6-b32eb49d129d", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", + "startLine": 931, + "endLine": 933, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "86b31341-5eb3-4325-80d6-b523645f892f", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/86b31341-5eb3-4325-80d6-b523645f892f", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", + "startLine": 833, + "endLine": 835, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "8948f994-02f3-47a8-b58c-f5364f0d3dee", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8948f994-02f3-47a8-b58c-f5364f0d3dee", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "projectsettings/ProjectSettings.mx.json", + "startLine": 52, + "endLine": 52, + "component": "projectsettings", + "type": "The cost of BCrypt algorithm should be at least 12", + "cweId": "CWE-916", + "severity": "HIGH", + "impact": "HIGH", + "exploitability": "HIGH", + "severityScore": 8.5, + "impactScore": 5.0, + "exploitabilityScore": 3.5, + "status": "RAW", + "remark": null, + "toolName": "SIG Mendix Security", + "ruleId": "mendix-security.project-settings.bcrypt-cost-new-format", + "weaknessIds": [ + "CWE-916" + ], + "categories": [ + "A2 Cryptographic Failures" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "8aa48fa6-0594-439a-8089-28da3edb36eb", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8aa48fa6-0594-439a-8089-28da3edb36eb", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", + "startLine": 793, + "endLine": 795, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "8c4ad3b9-b4ae-43fd-afbe-226f80010906", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8c4ad3b9-b4ae-43fd-afbe-226f80010906", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestWriteFileResult.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "8d67743a-5849-4507-b08d-c15029f2dd66", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8d67743a-5849-4507-b08d-c15029f2dd66", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", + "startLine": 793, + "endLine": 795, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "98b87c4b-816d-412b-ab04-8e5ebe541109", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/98b87c4b-816d-412b-ab04-8e5ebe541109", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", + "startLine": 931, + "endLine": 933, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "9a901392-a16f-41fb-964a-d5fb0fd7747d", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/9a901392-a16f-41fb-964a-d5fb0fd7747d", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", + "startLine": 867, + "endLine": 869, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "9bcb693a-0567-4953-806c-81e6e3b74b04", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/9bcb693a-0567-4953-806c-81e6e3b74b04", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javasource/_communitycommons/Misc.java", + "startLine": 583, + "endLine": 583, + "component": "javasource/_communitycommons", + "type": "\"InterruptedException\" should not be ignored", + "cweId": "CWE-391", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 6.9, + "impactScore": 3.5, + "exploitabilityScore": 3.4, + "status": "RAW", + "remark": null, + "toolName": "SonarQube (Java)", + "ruleId": "S2142", + "weaknessIds": [ + "CWE-391" + ], + "categories": [ + "Other" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "9e60c1f0-9e0c-4c7a-a316-6413fb414d15", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/9e60c1f0-9e0c-4c7a-a316-6413fb414d15", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestMessageImage.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "a86025c9-f752-4424-8be7-8eb89c176745", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/a86025c9-f752-4424-8be7-8eb89c176745", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", + "startLine": 897, + "endLine": 899, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "adf0f702-2466-401c-a65b-22ef92439392", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/adf0f702-2466-401c-a65b-22ef92439392", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/OpenMap.js", + "startLine": 68, + "endLine": 68, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `url` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "aeb834cb-6eb9-4f7c-ad46-9c5a389ac0cd", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/aeb834cb-6eb9-4f7c-ad46-9c5a389ac0cd", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", + "startLine": 853, + "endLine": 855, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "aee407a3-20b1-4c88-9fb5-dc4c8d629560", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/aee407a3-20b1-4c88-9fb5-dc4c8d629560", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", + "startLine": 897, + "endLine": 899, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b0555d2f-a74c-4ad1-bfd0-a43fab7db4a9", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b0555d2f-a74c-4ad1-bfd0-a43fab7db4a9", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", + "startLine": 1055, + "endLine": 1057, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b13249fe-9a28-4ab4-b71c-4252df058149", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b13249fe-9a28-4ab4-b71c-4252df058149", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/OpenURL.js", + "startLine": 40, + "endLine": 40, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `url` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b26be63c-bd24-4e08-91a2-c679e38af8da", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b26be63c-bd24-4e08-91a2-c679e38af8da", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", + "startLine": 881, + "endLine": 883, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b3fa5923-960b-4bb5-b366-dc3237681398", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b3fa5923-960b-4bb5-b366-dc3237681398", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", + "startLine": 59, + "endLine": 59, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `bcc` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b70cffa4-15e1-4e6e-aa65-4dd4d3b22e50", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b70cffa4-15e1-4e6e-aa65-4dd4d3b22e50", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", + "startLine": 853, + "endLine": 855, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b839394d-be63-423c-a39d-c13a655b0e4c", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b839394d-be63-423c-a39d-c13a655b0e4c", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", + "startLine": 1021, + "endLine": 1023, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "b86e80cc-ff02-4472-b03c-8bc4037f016e", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b86e80cc-ff02-4472-b03c-8bc4037f016e", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestCropImage.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "b92429be-0bf4-47c3-a140-3c5a72ef2628", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b92429be-0bf4-47c3-a140-3c5a72ef2628", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "projectsettings/ProjectSecurity.mx.json", + "startLine": 49, + "endLine": 49, + "component": "projectsettings", + "type": "Password policy should require a symbol in the password", + "cweId": "CWE-521", + "severity": "CRITICAL", + "impact": "CRITICAL", + "exploitability": "CRITICAL", + "severityScore": 9.2, + "impactScore": 5.4, + "exploitabilityScore": 3.8, + "status": "RAW", + "remark": null, + "toolName": "SIG Mendix Security", + "ruleId": "mendix-security.project-security.password-policy-symbol", + "weaknessIds": [ + "CWE-521" + ], + "categories": [ + "A7 Identification and Authentication Failures" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "ba0f4a8c-7857-4c4d-873c-1a999c2168bf", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ba0f4a8c-7857-4c4d-873c-1a999c2168bf", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "NativeFileDocuments/domainmodel/NativeActionLog.mx.json", + "startLine": 55, + "endLine": 104, + "component": "NativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "ba3a12a8-cc64-4d83-b49e-2dcbb36d7302", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ba3a12a8-cc64-4d83-b49e-2dcbb36d7302", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", + "startLine": 819, + "endLine": 821, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "c1cd31ae-80df-452e-a1e9-3f00f2e634c5", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c1cd31ae-80df-452e-a1e9-3f00f2e634c5", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", + "startLine": 847, + "endLine": 849, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "c5b9724f-434a-4c7c-8746-7f335a69961f", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c5b9724f-434a-4c7c-8746-7f335a69961f", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javasource/_communitycommons/Misc.java", + "startLine": 438, + "endLine": 438, + "component": "javasource/_communitycommons", + "type": "\"InterruptedException\" should not be ignored", + "cweId": "CWE-391", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 6.9, + "impactScore": 3.5, + "exploitabilityScore": 3.4, + "status": "RAW", + "remark": null, + "toolName": "SonarQube (Java)", + "ruleId": "S2142", + "weaknessIds": [ + "CWE-391" + ], + "categories": [ + "Other" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "c62566ad-6b41-4735-ab14-818282c272b1", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c62566ad-6b41-4735-ab14-818282c272b1", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", + "startLine": 833, + "endLine": 835, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "c904379e-dffc-4583-aeaf-3f55d9885b52", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c904379e-dffc-4583-aeaf-3f55d9885b52", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", + "startLine": 1021, + "endLine": 1023, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "ca3d62f4-15f6-44de-a4d4-8b4483f18363", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ca3d62f4-15f6-44de-a4d4-8b4483f18363", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", + "startLine": 847, + "endLine": 849, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "ce095e75-23f5-4386-9394-e48508260e42", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ce095e75-23f5-4386-9394-e48508260e42", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "projectsettings/ProjectSecurity.mx.json", + "startLine": 5, + "endLine": 5, + "component": "projectsettings", + "type": "The default Administrator username should be changed", + "cweId": "CWE-1188", + "severity": "HIGH", + "impact": "CRITICAL", + "exploitability": "HIGH", + "severityScore": 8.9, + "impactScore": 5.4, + "exploitabilityScore": 3.5, + "status": "RAW", + "remark": null, + "toolName": "SIG Mendix Security", + "ruleId": "mendix-security.project-security.project-security-admin-username", + "weaknessIds": [ + "CWE-1188" + ], + "categories": [ + "Other" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "cf5c1f98-305f-43d6-bc22-ca1fe03a78e8", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/cf5c1f98-305f-43d6-bc22-ca1fe03a78e8", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/CroppedImage.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "d32fc788-4fd6-450a-bd23-f51efe78806e", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d32fc788-4fd6-450a-bd23-f51efe78806e", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", + "startLine": 881, + "endLine": 883, + "component": "widgets/com.mendix.widget.native.VideoPlayer", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "d3df6ee5-803e-4489-9620-4fe4952576a3", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d3df6ee5-803e-4489-9620-4fe4952576a3", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", + "startLine": 1055, + "endLine": 1057, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "d5c6c905-8c5d-4e42-a8d9-15e628e3b3e4", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d5c6c905-8c5d-4e42-a8d9-15e628e3b3e4", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "projectsettings/ProjectSecurity.mx.json", + "startLine": 46, + "endLine": 46, + "component": "projectsettings", + "type": "Password policy should require a minimum password length of 8 characters", + "cweId": "CWE-521", + "severity": "CRITICAL", + "impact": "CRITICAL", + "exploitability": "CRITICAL", + "severityScore": 9.2, + "impactScore": 5.4, + "exploitabilityScore": 3.8, + "status": "RAW", + "remark": null, + "toolName": "SIG Mendix Security", + "ruleId": "mendix-security.project-security.password-policy-minimumlength", + "weaknessIds": [ + "CWE-521" + ], + "categories": [ + "A7 Identification and Authentication Failures" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "d7fc47b4-5ca8-4812-8618-9386063d52bd", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d7fc47b4-5ca8-4812-8618-9386063d52bd", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/ImageToResize.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "db666862-6f4d-4abc-9620-6b4ebda60e84", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/db666862-6f4d-4abc-9620-6b4ebda60e84", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", + "startLine": 1021, + "endLine": 1023, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "dc257970-5dbd-4995-8aef-4ad36bdd424b", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/dc257970-5dbd-4995-8aef-4ad36bdd424b", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", + "startLine": 827, + "endLine": 829, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "dd105eb0-fa00-4c04-b439-005de58bcd09", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/dd105eb0-fa00-4c04-b439-005de58bcd09", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/ResizedImage.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", + "cweId": "CWE-266", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 6.6, + "impactScore": 4.0, + "exploitabilityScore": 2.6, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-default-rights-set-to-read-readwrite", + "weaknessIds": [ + "CWE-266" + ], + "categories": [ + "A4 Insecure Design" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "de55ae3c-9e6b-451b-9816-78a64229dcca", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/de55ae3c-9e6b-451b-9816-78a64229dcca", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", + "startLine": 1021, + "endLine": 1023, + "component": "widgets/com.mendix.widget.native.Signature", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "e61a54c3-51c4-413c-8ff6-b5132130a432", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/e61a54c3-51c4-413c-8ff6-b5132130a432", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", + "startLine": 59, + "endLine": 59, + "component": "javascriptsource/_nanoflowcommons/actions", + "type": "The application accepts potentially user-controlled input `cc` which can control the location of the current window context", + "cweId": "CWE-601", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "HIGH", + "severityScore": 5.8, + "impactScore": 2.9, + "exploitabilityScore": 2.9, + "status": "RAW", + "remark": null, + "toolName": "Semgrep", + "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", + "weaknessIds": [ + "CWE-601" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "e8145388-ce76-4788-8584-091b140c366e", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/e8145388-ce76-4788-8584-091b140c366e", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", + "startLine": 853, + "endLine": 855, + "component": "widgets/com.mendix.widget.native.WebView", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "f0780560-c3df-47f4-8665-564006c54708", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/f0780560-c3df-47f4-8665-564006c54708", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "NativeFileDocuments/domainmodel/NativeActionLog.mx.json", + "startLine": 55, + "endLine": 104, + "component": "NativeFileDocuments", + "type": "Access Rule found that violates the Least Privilege Principle (all rights set to Read or ReadWrite)", + "cweId": "CWE-272", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 5.4, + "impactScore": 3.2, + "exploitabilityScore": 2.2, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-with-access-rights-violating-least-privilige", + "weaknessIds": [ + "CWE-272" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "f0f4f6e9-d899-4eda-9da5-7504cfa89025", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/f0f4f6e9-d899-4eda-9da5-7504cfa89025", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", + "startLine": 833, + "endLine": 835, + "component": "widgets/com.mendix.widget.native.ListViewSwipe", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "f570cfc9-af2c-449c-aaaa-5096a9e9581d", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/f570cfc9-af2c-449c-aaaa-5096a9e9581d", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", + "startLine": 931, + "endLine": 933, + "component": "widgets/com.mendix.widget.native.Maps", + "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "NodeJS Scan", + "ruleId": "njsscan.crypto.node_timing_attack", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "fc5149e1-3cf4-4c1e-b03d-53841eca17ad", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/fc5149e1-3cf4-4c1e-b03d-53841eca17ad", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "javasource/_communitycommons/Misc.java", + "startLine": 399, + "endLine": 399, + "component": "javasource/_communitycommons", + "type": "Relying on the thread scheduler is discouraged.", + "cweId": "CWE-662", + "severity": "INFORMATION", + "impact": "INFORMATION", + "exploitability": "INFORMATION", + "severityScore": 0.0, + "impactScore": 0.0, + "exploitabilityScore": 0.0, + "status": "RAW", + "remark": null, + "toolName": "Google ErrorProne", + "ruleId": "ThreadPriorityCheck", + "weaknessIds": [ + "CWE-662" + ], + "categories": [ + "Other" + ], + "isManualFinding": false, + "isSeverityOverridden": false + }, + { + "id": "fcdf2ced-2c10-4f6c-8caa-f58d9d4a06cc", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/fcdf2ced-2c10-4f6c-8caa-f58d9d4a06cc", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "TestNativeFileDocuments/domainmodel/TestMessage.mx.json", + "startLine": 5, + "endLine": 29, + "component": "TestNativeFileDocuments", + "type": "Access Rule found that violates the Least Privilege Principle (all rights set to Read or ReadWrite)", + "cweId": "CWE-272", + "severity": "MEDIUM", + "impact": "MEDIUM", + "exploitability": "MEDIUM", + "severityScore": 5.4, + "impactScore": 3.2, + "exploitabilityScore": 2.2, + "status": "RAW", + "remark": null, + "toolName": "SIG SAT Violations", + "ruleId": "entities-with-access-rights-violating-least-privilige", + "weaknessIds": [ + "CWE-272" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": true + }, + { + "id": "ffab3072-9a1e-4ddb-a513-e922fce677f1", + "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ffab3072-9a1e-4ddb-a513-e922fce677f1", + "firstSeenAnalysisDate": "2025-10-24", + "lastSeenAnalysisDate": "2025-10-24", + "firstSeenSnapshotDate": "2025-10-24", + "lastSeenSnapshotDate": "2025-10-24", + "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", + "startLine": 827, + "endLine": 829, + "component": "widgets/com.mendix.widget.native.AppEvents", + "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", + "cweId": "CWE-208", + "severity": "MEDIUM", + "impact": "LOW", + "exploitability": "HIGH", + "severityScore": 5.2, + "impactScore": 2.2, + "exploitabilityScore": 3.0, + "status": "RAW", + "remark": null, + "toolName": "ESLint", + "ruleId": "gitlab.eslint.detect-possible-timing-attacks", + "weaknessIds": [ + "CWE-208" + ], + "categories": [ + "A1 Broken Access Control" + ], + "isManualFinding": false, + "isSeverityOverridden": false + } +] From 129f8a2bbd163975b843d2362330db0af626179d Mon Sep 17 00:00:00 2001 From: Dennis Bijlsma Date: Wed, 19 Nov 2025 09:25:11 +0100 Subject: [PATCH 3/6] Support both SARIF and native SIG finding JSONs. --- ...rif_processor.py => findings_processor.py} | 23 +- .../reports/security_markdown_report.py | 1 + .../sigridci/reports/security_text_report.py | 4 +- ...rocessor.py => test_findings_processor.py} | 24 +- test/testdata/security.sig.json | 2656 ----------------- 5 files changed, 42 insertions(+), 2666 deletions(-) rename sigridci/sigridci/analysisresults/{sarif_processor.py => findings_processor.py} (77%) rename test/{test_sarif_processor.py => test_findings_processor.py} (60%) diff --git a/sigridci/sigridci/analysisresults/sarif_processor.py b/sigridci/sigridci/analysisresults/findings_processor.py similarity index 77% rename from sigridci/sigridci/analysisresults/sarif_processor.py rename to sigridci/sigridci/analysisresults/findings_processor.py index 0c664fcb..814b1c04 100644 --- a/sigridci/sigridci/analysisresults/sarif_processor.py +++ b/sigridci/sigridci/analysisresults/findings_processor.py @@ -26,12 +26,23 @@ class Finding: line: int -class SarifProcessor: +class FindingsProcessor: def extractRelevantFindings(self, feedback, objective): + findings = self.extractAllFindings(feedback) + return [finding for finding in findings if Objective.isFindingIncluded(finding.risk, objective)] + + def extractAllFindings(self, feedback): if feedback is None: return [] - findings = list(self.extractAllFindings(feedback)) - return [finding for finding in findings if Objective.isFindingIncluded(finding.risk, objective)] + elif "runs" in feedback: + sarifProcessor = SarifProcessor() + return list(sarifProcessor.extractAllFindings(feedback)) + else: + sigridFindingsProcessor = SigridFindingsProcessor() + return list(sigridFindingsProcessor.extractAllFindings(feedback)) + + +class SarifProcessor: def extractAllFindings(self, feedback): rules = list(self.getRules(feedback)) @@ -58,3 +69,9 @@ def getFindingSeverity(self, result, rules): if rule["id"] == result["ruleId"]: severity = rule["properties"]["severity"].replace("ERROR", "HIGH").replace("WARNING", "MEDIUM") return severity.upper() if severity else "UNKNOWN" + + +class SigridFindingsProcessor: + def extractAllFindings(self, feedback): + for finding in feedback: + yield Finding(finding["id"], finding["severity"], finding["type"], finding["filePath"], finding["startLine"]) diff --git a/sigridci/sigridci/reports/security_markdown_report.py b/sigridci/sigridci/reports/security_markdown_report.py index d53feeda..8ee1223f 100644 --- a/sigridci/sigridci/reports/security_markdown_report.py +++ b/sigridci/sigridci/reports/security_markdown_report.py @@ -73,6 +73,7 @@ def generateFindingsTable(self, findings, rules, options): for finding in findings[0:self.MAX_FINDINGS]: symbol = self.SEVERITY_SYMBOLS[self.getFindingSeverity(finding, rules)] + file = finding["locations"][0]["physicalLocation"]["artifactLocation"]["uri"] line = finding["locations"][0]["physicalLocation"]["region"]["startLine"] link = self.decorateLink(options, f"{file}:{line}", file, line) description = finding["message"]["text"] diff --git a/sigridci/sigridci/reports/security_text_report.py b/sigridci/sigridci/reports/security_text_report.py index 8441c64d..9bc7ddb6 100644 --- a/sigridci/sigridci/reports/security_text_report.py +++ b/sigridci/sigridci/reports/security_text_report.py @@ -16,7 +16,7 @@ from .report import Report from .security_markdown_report import SecurityMarkdownReport -from ..analysisresults.sarif_processor import SarifProcessor +from ..analysisresults.findings_processor import FindingsProcessor class SecurityTextReport(Report): @@ -26,7 +26,7 @@ def __init__(self, objective, *, output=sys.stdout): self.objective = objective def generate(self, analysisId, feedback, options): - processor = SarifProcessor() + processor = FindingsProcessor() findings = list(processor.extractRelevantFindings(feedback, self.objective)) if len(findings) > 0: diff --git a/test/test_sarif_processor.py b/test/test_findings_processor.py similarity index 60% rename from test/test_sarif_processor.py rename to test/test_findings_processor.py index 4d918021..fa89f586 100644 --- a/test/test_sarif_processor.py +++ b/test/test_findings_processor.py @@ -16,16 +16,16 @@ import os from unittest import TestCase -from sigridci.sigridci.analysisresults.sarif_processor import SarifProcessor +from sigridci.sigridci.analysisresults.findings_processor import FindingsProcessor -class SarifProcessorTest(TestCase): +class FindingsProcessorTest(TestCase): - def testExtractAllFindings(self): + def testExtractAllFindingsSarif(self): with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: feedback = json.load(f) - processor = SarifProcessor() + processor = FindingsProcessor() findings = list(processor.extractAllFindings(feedback)) self.assertEqual(len(findings), 2) @@ -38,9 +38,23 @@ def testExtractRelevantFindings(self): with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: feedback = json.load(f) - processor = SarifProcessor() + processor = FindingsProcessor() findings = list(processor.extractRelevantFindings(feedback, "HIGH")) self.assertEqual(len(findings), 1) self.assertEqual(findings[0].risk, "CRITICAL") self.assertEqual(findings[0].description, "Weak Hash algorithm used") + + def testExtractAllFindingsNative(self): + with open(os.path.dirname(__file__) + "/testdata/security.sig.json", encoding="utf-8", mode="r") as f: + feedback = json.load(f) + + processor = FindingsProcessor() + findings = list(processor.extractAllFindings(feedback)) + + self.assertEqual(len(findings), 1) + self.assertEqual(findings[0].fingerprint, "0006d9dd-5288-424a-bf8b-077c98ef00ee") + self.assertEqual(findings[0].risk, "MEDIUM") + self.assertEqual(findings[0].description, "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks") + self.assertEqual(findings[0].file, "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js") + self.assertEqual(findings[0].line, 853) diff --git a/test/testdata/security.sig.json b/test/testdata/security.sig.json index ba98a6ca..4e248e84 100644 --- a/test/testdata/security.sig.json +++ b/test/testdata/security.sig.json @@ -30,2661 +30,5 @@ ], "isManualFinding": false, "isSeverityOverridden": false - }, - { - "id": "050d2de2-db7f-4ce7-8bde-176bc50d0b3a", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/050d2de2-db7f-4ce7-8bde-176bc50d0b3a", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", - "startLine": 867, - "endLine": 869, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "07caaeb7-83f1-45db-bf8e-91384bcae54c", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/07caaeb7-83f1-45db-bf8e-91384bcae54c", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", - "startLine": 847, - "endLine": 849, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "0b831862-ea1f-426c-9a9b-daeec885d72f", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0b831862-ea1f-426c-9a9b-daeec885d72f", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", - "startLine": 897, - "endLine": 899, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "0e617f61-2b9f-4d67-8219-8ac70e3ae6f3", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0e617f61-2b9f-4d67-8219-8ac70e3ae6f3", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/NavigateTo.js", - "startLine": 68, - "endLine": 68, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `url` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "0edd0d1b-35f5-467b-8597-798c35334aad", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0edd0d1b-35f5-467b-8597-798c35334aad", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "projectsettings/ProjectSecurity.mx.json", - "startLine": 4, - "endLine": 4, - "component": "projectsettings", - "type": "The default Administrator password should be changed", - "cweId": "CWE-1188", - "severity": "HIGH", - "impact": "CRITICAL", - "exploitability": "HIGH", - "severityScore": 8.9, - "impactScore": 5.4, - "exploitabilityScore": 3.5, - "status": "RAW", - "remark": null, - "toolName": "SIG Mendix Security", - "ruleId": "mendix-security.project-security.project-security-admin-password", - "weaknessIds": [ - "CWE-1188" - ], - "categories": [ - "Other" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "0fb8da48-8314-4fa0-916d-2de6d8e66f63", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/0fb8da48-8314-4fa0-916d-2de6d8e66f63", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", - "startLine": 881, - "endLine": 883, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "139641f4-1330-40cf-91a4-c186c831e498", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/139641f4-1330-40cf-91a4-c186c831e498", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", - "startLine": 59, - "endLine": 59, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `subject` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "139dbe74-e4c9-4f3e-82c8-942df2ee9541", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/139dbe74-e4c9-4f3e-82c8-942df2ee9541", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", - "startLine": 793, - "endLine": 795, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "15072d67-48b0-41cd-9602-b776a107e71f", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/15072d67-48b0-41cd-9602-b776a107e71f", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestDocument.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "1679c4ee-a958-4670-8167-b0a4bfc945f8", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/1679c4ee-a958-4670-8167-b0a4bfc945f8", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestWriteFile.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "171575af-9876-4edd-9229-f2a8131f4846", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/171575af-9876-4edd-9229-f2a8131f4846", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", - "startLine": 847, - "endLine": 849, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "1d6ee2dc-f79f-4cfb-9d05-2dd653d16e50", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/1d6ee2dc-f79f-4cfb-9d05-2dd653d16e50", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", - "startLine": 793, - "endLine": 795, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "1f87aed0-036c-4824-bce3-44eea3467d94", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/1f87aed0-036c-4824-bce3-44eea3467d94", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", - "startLine": 867, - "endLine": 869, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "2032e939-efa0-43f0-9735-b8b86e0630cb", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/2032e939-efa0-43f0-9735-b8b86e0630cb", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/NavigateTo.js", - "startLine": 57, - "endLine": 57, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `location` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "25bc5090-fd30-41e5-8db2-8372b85e4f22", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/25bc5090-fd30-41e5-8db2-8372b85e4f22", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", - "startLine": 867, - "endLine": 869, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "276d9c16-da3a-40fe-bd3b-edf4e547855a", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/276d9c16-da3a-40fe-bd3b-edf4e547855a", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", - "startLine": 881, - "endLine": 883, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "27c54c9f-31c4-400e-aa61-9d6426e9b710", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/27c54c9f-31c4-400e-aa61-9d6426e9b710", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javasource/_communitycommons/Misc.java", - "startLine": 460, - "endLine": 460, - "component": "javasource/_communitycommons", - "type": "\"InterruptedException\" should not be ignored", - "cweId": "CWE-391", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 6.9, - "impactScore": 3.5, - "exploitabilityScore": 3.4, - "status": "RAW", - "remark": null, - "toolName": "SonarQube (Java)", - "ruleId": "S2142", - "weaknessIds": [ - "CWE-391" - ], - "categories": [ - "Other" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "2cb90288-c8b8-4f11-be11-2f22c24428ee", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/2cb90288-c8b8-4f11-be11-2f22c24428ee", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/SendTextMessage.js", - "startLine": 41, - "endLine": 41, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `phoneNumber` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "322cd5d8-a19f-4b39-a2a3-a0382bd35800", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/322cd5d8-a19f-4b39-a2a3-a0382bd35800", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/CallPhoneNumber.js", - "startLine": 41, - "endLine": 41, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `phoneNumber` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "390f4064-7965-495e-bf9e-a42d4c8aa060", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/390f4064-7965-495e-bf9e-a42d4c8aa060", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", - "startLine": 833, - "endLine": 835, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "392065e6-01dd-43cc-92dd-35bc13f20bcf", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/392065e6-01dd-43cc-92dd-35bc13f20bcf", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", - "startLine": 1055, - "endLine": 1057, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "3d37d95d-eed9-4204-987c-b3741b7bdeb8", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/3d37d95d-eed9-4204-987c-b3741b7bdeb8", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", - "startLine": 897, - "endLine": 899, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "3f137c52-4d05-477a-b3df-7a12cf7cb7e9", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/3f137c52-4d05-477a-b3df-7a12cf7cb7e9", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", - "startLine": 819, - "endLine": 821, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "4a39bd83-4f1f-4cda-8638-339e315b8226", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/4a39bd83-4f1f-4cda-8638-339e315b8226", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", - "startLine": 819, - "endLine": 821, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "4bc65b9f-f2e7-43b4-af03-47d706dfdda1", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/4bc65b9f-f2e7-43b4-af03-47d706dfdda1", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", - "startLine": 819, - "endLine": 821, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "593c52b5-9875-4fcc-98f6-ecc5f6924c85", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/593c52b5-9875-4fcc-98f6-ecc5f6924c85", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestMessage.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "598893a3-9459-491a-a399-5eb52ee2f317", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/598893a3-9459-491a-a399-5eb52ee2f317", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", - "startLine": 59, - "endLine": 59, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `body` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "5b0664b9-776d-47d2-91cf-c78c43ad6ce1", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/5b0664b9-776d-47d2-91cf-c78c43ad6ce1", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", - "startLine": 59, - "endLine": 59, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `recipient` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "5bcb5e23-f7d6-411c-9bed-d2509228cd9f", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/5bcb5e23-f7d6-411c-9bed-d2509228cd9f", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", - "startLine": 1055, - "endLine": 1057, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "63e9a99b-bb6e-4914-9c8e-36097fa9b097", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/63e9a99b-bb6e-4914-9c8e-36097fa9b097", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/OpenMap.js", - "startLine": 57, - "endLine": 57, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `location` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "7145cef2-56d0-467f-a12e-74de1708892a", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/7145cef2-56d0-467f-a12e-74de1708892a", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", - "startLine": 931, - "endLine": 933, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "73a2a457-2bc5-4d0b-9d37-4b4963a43f70", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/73a2a457-2bc5-4d0b-9d37-4b4963a43f70", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", - "startLine": 827, - "endLine": 829, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "76298a11-e220-4599-abca-3ed69d748613", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/76298a11-e220-4599-abca-3ed69d748613", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", - "startLine": 827, - "endLine": 829, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "77984d01-6c31-48f0-bb33-74ce99a8105d", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/77984d01-6c31-48f0-bb33-74ce99a8105d", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "NativeFileDocuments/domainmodel/DeviceLogFile.mx.json", - "startLine": 76, - "endLine": 146, - "component": "NativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "7d8f22aa-1db4-4000-8be1-f182dd917ffc", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/7d8f22aa-1db4-4000-8be1-f182dd917ffc", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "projectsettings/ProjectSecurity.mx.json", - "startLine": 30, - "endLine": 30, - "component": "projectsettings", - "type": "Demo users should be disabled in Project Security settings", - "cweId": "CWE-288", - "severity": "HIGH", - "impact": "HIGH", - "exploitability": "HIGH", - "severityScore": 7.9, - "impactScore": 4.5, - "exploitabilityScore": 3.4, - "status": "RAW", - "remark": null, - "toolName": "SIG Mendix Security", - "ruleId": "mendix-security.project-security.project-security-demousers", - "weaknessIds": [ - "CWE-288" - ], - "categories": [ - "A7 Identification and Authentication Failures" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "81f0fafc-ff0c-4a2c-937b-c77d5a011d76", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/81f0fafc-ff0c-4a2c-937b-c77d5a011d76", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestZip.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "8325f7cb-bf8a-4b79-b2a6-b32eb49d129d", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8325f7cb-bf8a-4b79-b2a6-b32eb49d129d", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", - "startLine": 931, - "endLine": 933, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "86b31341-5eb3-4325-80d6-b523645f892f", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/86b31341-5eb3-4325-80d6-b523645f892f", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", - "startLine": 833, - "endLine": 835, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "8948f994-02f3-47a8-b58c-f5364f0d3dee", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8948f994-02f3-47a8-b58c-f5364f0d3dee", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "projectsettings/ProjectSettings.mx.json", - "startLine": 52, - "endLine": 52, - "component": "projectsettings", - "type": "The cost of BCrypt algorithm should be at least 12", - "cweId": "CWE-916", - "severity": "HIGH", - "impact": "HIGH", - "exploitability": "HIGH", - "severityScore": 8.5, - "impactScore": 5.0, - "exploitabilityScore": 3.5, - "status": "RAW", - "remark": null, - "toolName": "SIG Mendix Security", - "ruleId": "mendix-security.project-settings.bcrypt-cost-new-format", - "weaknessIds": [ - "CWE-916" - ], - "categories": [ - "A2 Cryptographic Failures" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "8aa48fa6-0594-439a-8089-28da3edb36eb", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8aa48fa6-0594-439a-8089-28da3edb36eb", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", - "startLine": 793, - "endLine": 795, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "8c4ad3b9-b4ae-43fd-afbe-226f80010906", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8c4ad3b9-b4ae-43fd-afbe-226f80010906", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestWriteFileResult.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "8d67743a-5849-4507-b08d-c15029f2dd66", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/8d67743a-5849-4507-b08d-c15029f2dd66", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", - "startLine": 793, - "endLine": 795, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "98b87c4b-816d-412b-ab04-8e5ebe541109", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/98b87c4b-816d-412b-ab04-8e5ebe541109", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", - "startLine": 931, - "endLine": 933, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "9a901392-a16f-41fb-964a-d5fb0fd7747d", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/9a901392-a16f-41fb-964a-d5fb0fd7747d", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", - "startLine": 867, - "endLine": 869, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "9bcb693a-0567-4953-806c-81e6e3b74b04", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/9bcb693a-0567-4953-806c-81e6e3b74b04", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javasource/_communitycommons/Misc.java", - "startLine": 583, - "endLine": 583, - "component": "javasource/_communitycommons", - "type": "\"InterruptedException\" should not be ignored", - "cweId": "CWE-391", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 6.9, - "impactScore": 3.5, - "exploitabilityScore": 3.4, - "status": "RAW", - "remark": null, - "toolName": "SonarQube (Java)", - "ruleId": "S2142", - "weaknessIds": [ - "CWE-391" - ], - "categories": [ - "Other" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "9e60c1f0-9e0c-4c7a-a316-6413fb414d15", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/9e60c1f0-9e0c-4c7a-a316-6413fb414d15", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestMessageImage.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "a86025c9-f752-4424-8be7-8eb89c176745", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/a86025c9-f752-4424-8be7-8eb89c176745", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.android.js", - "startLine": 897, - "endLine": 899, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "adf0f702-2466-401c-a65b-22ef92439392", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/adf0f702-2466-401c-a65b-22ef92439392", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/OpenMap.js", - "startLine": 68, - "endLine": 68, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `url` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "aeb834cb-6eb9-4f7c-ad46-9c5a389ac0cd", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/aeb834cb-6eb9-4f7c-ad46-9c5a389ac0cd", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", - "startLine": 853, - "endLine": 855, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "aee407a3-20b1-4c88-9fb5-dc4c8d629560", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/aee407a3-20b1-4c88-9fb5-dc4c8d629560", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", - "startLine": 897, - "endLine": 899, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b0555d2f-a74c-4ad1-bfd0-a43fab7db4a9", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b0555d2f-a74c-4ad1-bfd0-a43fab7db4a9", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", - "startLine": 1055, - "endLine": 1057, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b13249fe-9a28-4ab4-b71c-4252df058149", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b13249fe-9a28-4ab4-b71c-4252df058149", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/OpenURL.js", - "startLine": 40, - "endLine": 40, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `url` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b26be63c-bd24-4e08-91a2-c679e38af8da", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b26be63c-bd24-4e08-91a2-c679e38af8da", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", - "startLine": 881, - "endLine": 883, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b3fa5923-960b-4bb5-b366-dc3237681398", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b3fa5923-960b-4bb5-b366-dc3237681398", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", - "startLine": 59, - "endLine": 59, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `bcc` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b70cffa4-15e1-4e6e-aa65-4dd4d3b22e50", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b70cffa4-15e1-4e6e-aa65-4dd4d3b22e50", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", - "startLine": 853, - "endLine": 855, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b839394d-be63-423c-a39d-c13a655b0e4c", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b839394d-be63-423c-a39d-c13a655b0e4c", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", - "startLine": 1021, - "endLine": 1023, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "b86e80cc-ff02-4472-b03c-8bc4037f016e", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b86e80cc-ff02-4472-b03c-8bc4037f016e", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestCropImage.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "b92429be-0bf4-47c3-a140-3c5a72ef2628", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/b92429be-0bf4-47c3-a140-3c5a72ef2628", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "projectsettings/ProjectSecurity.mx.json", - "startLine": 49, - "endLine": 49, - "component": "projectsettings", - "type": "Password policy should require a symbol in the password", - "cweId": "CWE-521", - "severity": "CRITICAL", - "impact": "CRITICAL", - "exploitability": "CRITICAL", - "severityScore": 9.2, - "impactScore": 5.4, - "exploitabilityScore": 3.8, - "status": "RAW", - "remark": null, - "toolName": "SIG Mendix Security", - "ruleId": "mendix-security.project-security.password-policy-symbol", - "weaknessIds": [ - "CWE-521" - ], - "categories": [ - "A7 Identification and Authentication Failures" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "ba0f4a8c-7857-4c4d-873c-1a999c2168bf", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ba0f4a8c-7857-4c4d-873c-1a999c2168bf", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "NativeFileDocuments/domainmodel/NativeActionLog.mx.json", - "startLine": 55, - "endLine": 104, - "component": "NativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "ba3a12a8-cc64-4d83-b49e-2dcbb36d7302", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ba3a12a8-cc64-4d83-b49e-2dcbb36d7302", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.android.js", - "startLine": 819, - "endLine": 821, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "c1cd31ae-80df-452e-a1e9-3f00f2e634c5", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c1cd31ae-80df-452e-a1e9-3f00f2e634c5", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", - "startLine": 847, - "endLine": 849, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "c5b9724f-434a-4c7c-8746-7f335a69961f", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c5b9724f-434a-4c7c-8746-7f335a69961f", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javasource/_communitycommons/Misc.java", - "startLine": 438, - "endLine": 438, - "component": "javasource/_communitycommons", - "type": "\"InterruptedException\" should not be ignored", - "cweId": "CWE-391", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 6.9, - "impactScore": 3.5, - "exploitabilityScore": 3.4, - "status": "RAW", - "remark": null, - "toolName": "SonarQube (Java)", - "ruleId": "S2142", - "weaknessIds": [ - "CWE-391" - ], - "categories": [ - "Other" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "c62566ad-6b41-4735-ab14-818282c272b1", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c62566ad-6b41-4735-ab14-818282c272b1", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.android.js", - "startLine": 833, - "endLine": 835, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "c904379e-dffc-4583-aeaf-3f55d9885b52", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/c904379e-dffc-4583-aeaf-3f55d9885b52", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", - "startLine": 1021, - "endLine": 1023, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "ca3d62f4-15f6-44de-a4d4-8b4483f18363", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ca3d62f4-15f6-44de-a4d4-8b4483f18363", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.ios.js", - "startLine": 847, - "endLine": 849, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "ce095e75-23f5-4386-9394-e48508260e42", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ce095e75-23f5-4386-9394-e48508260e42", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "projectsettings/ProjectSecurity.mx.json", - "startLine": 5, - "endLine": 5, - "component": "projectsettings", - "type": "The default Administrator username should be changed", - "cweId": "CWE-1188", - "severity": "HIGH", - "impact": "CRITICAL", - "exploitability": "HIGH", - "severityScore": 8.9, - "impactScore": 5.4, - "exploitabilityScore": 3.5, - "status": "RAW", - "remark": null, - "toolName": "SIG Mendix Security", - "ruleId": "mendix-security.project-security.project-security-admin-username", - "weaknessIds": [ - "CWE-1188" - ], - "categories": [ - "Other" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "cf5c1f98-305f-43d6-bc22-ca1fe03a78e8", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/cf5c1f98-305f-43d6-bc22-ca1fe03a78e8", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/CroppedImage.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "d32fc788-4fd6-450a-bd23-f51efe78806e", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d32fc788-4fd6-450a-bd23-f51efe78806e", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.VideoPlayer/com/mendix/widget/native/videoplayer/VideoPlayer.android.js", - "startLine": 881, - "endLine": 883, - "component": "widgets/com.mendix.widget.native.VideoPlayer", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "d3df6ee5-803e-4489-9620-4fe4952576a3", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d3df6ee5-803e-4489-9620-4fe4952576a3", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.android.js", - "startLine": 1055, - "endLine": 1057, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "d5c6c905-8c5d-4e42-a8d9-15e628e3b3e4", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d5c6c905-8c5d-4e42-a8d9-15e628e3b3e4", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "projectsettings/ProjectSecurity.mx.json", - "startLine": 46, - "endLine": 46, - "component": "projectsettings", - "type": "Password policy should require a minimum password length of 8 characters", - "cweId": "CWE-521", - "severity": "CRITICAL", - "impact": "CRITICAL", - "exploitability": "CRITICAL", - "severityScore": 9.2, - "impactScore": 5.4, - "exploitabilityScore": 3.8, - "status": "RAW", - "remark": null, - "toolName": "SIG Mendix Security", - "ruleId": "mendix-security.project-security.password-policy-minimumlength", - "weaknessIds": [ - "CWE-521" - ], - "categories": [ - "A7 Identification and Authentication Failures" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "d7fc47b4-5ca8-4812-8618-9386063d52bd", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/d7fc47b4-5ca8-4812-8618-9386063d52bd", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/ImageToResize.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "db666862-6f4d-4abc-9620-6b4ebda60e84", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/db666862-6f4d-4abc-9620-6b4ebda60e84", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", - "startLine": 1021, - "endLine": 1023, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "dc257970-5dbd-4995-8aef-4ad36bdd424b", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/dc257970-5dbd-4995-8aef-4ad36bdd424b", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.ios.js", - "startLine": 827, - "endLine": 829, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "dd105eb0-fa00-4c04-b439-005de58bcd09", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/dd105eb0-fa00-4c04-b439-005de58bcd09", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/ResizedImage.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Entities where Default Rights for New Members are set to Read / ReadWrite for a non high-privilege role", - "cweId": "CWE-266", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 6.6, - "impactScore": 4.0, - "exploitabilityScore": 2.6, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-default-rights-set-to-read-readwrite", - "weaknessIds": [ - "CWE-266" - ], - "categories": [ - "A4 Insecure Design" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "de55ae3c-9e6b-451b-9816-78a64229dcca", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/de55ae3c-9e6b-451b-9816-78a64229dcca", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Signature/com/mendix/widget/native/signature/Signature.ios.js", - "startLine": 1021, - "endLine": 1023, - "component": "widgets/com.mendix.widget.native.Signature", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "e61a54c3-51c4-413c-8ff6-b5132130a432", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/e61a54c3-51c4-413c-8ff6-b5132130a432", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javascriptsource/_nanoflowcommons/actions/DraftEmail.js", - "startLine": 59, - "endLine": 59, - "component": "javascriptsource/_nanoflowcommons/actions", - "type": "The application accepts potentially user-controlled input `cc` which can control the location of the current window context", - "cweId": "CWE-601", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "HIGH", - "severityScore": 5.8, - "impactScore": 2.9, - "exploitabilityScore": 2.9, - "status": "RAW", - "remark": null, - "toolName": "Semgrep", - "ruleId": "semgrep-community-rules.javascript.browser.security.js-open-redirect-from-function", - "weaknessIds": [ - "CWE-601" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "e8145388-ce76-4788-8584-091b140c366e", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/e8145388-ce76-4788-8584-091b140c366e", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.WebView/com/mendix/widget/native/webview/WebView.ios.js", - "startLine": 853, - "endLine": 855, - "component": "widgets/com.mendix.widget.native.WebView", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "f0780560-c3df-47f4-8665-564006c54708", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/f0780560-c3df-47f4-8665-564006c54708", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "NativeFileDocuments/domainmodel/NativeActionLog.mx.json", - "startLine": 55, - "endLine": 104, - "component": "NativeFileDocuments", - "type": "Access Rule found that violates the Least Privilege Principle (all rights set to Read or ReadWrite)", - "cweId": "CWE-272", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 5.4, - "impactScore": 3.2, - "exploitabilityScore": 2.2, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-with-access-rights-violating-least-privilige", - "weaknessIds": [ - "CWE-272" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "f0f4f6e9-d899-4eda-9da5-7504cfa89025", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/f0f4f6e9-d899-4eda-9da5-7504cfa89025", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.ListViewSwipe/com/mendix/widget/native/listviewswipe/ListViewSwipe.ios.js", - "startLine": 833, - "endLine": 835, - "component": "widgets/com.mendix.widget.native.ListViewSwipe", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "f570cfc9-af2c-449c-aaaa-5096a9e9581d", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/f570cfc9-af2c-449c-aaaa-5096a9e9581d", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.Maps/com/mendix/widget/native/maps/Maps.ios.js", - "startLine": 931, - "endLine": 933, - "component": "widgets/com.mendix.widget.native.Maps", - "type": "String comparisons using '===', '!==', '!=' and '==' is vulnerable to timing attacks", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "NodeJS Scan", - "ruleId": "njsscan.crypto.node_timing_attack", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "fc5149e1-3cf4-4c1e-b03d-53841eca17ad", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/fc5149e1-3cf4-4c1e-b03d-53841eca17ad", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "javasource/_communitycommons/Misc.java", - "startLine": 399, - "endLine": 399, - "component": "javasource/_communitycommons", - "type": "Relying on the thread scheduler is discouraged.", - "cweId": "CWE-662", - "severity": "INFORMATION", - "impact": "INFORMATION", - "exploitability": "INFORMATION", - "severityScore": 0.0, - "impactScore": 0.0, - "exploitabilityScore": 0.0, - "status": "RAW", - "remark": null, - "toolName": "Google ErrorProne", - "ruleId": "ThreadPriorityCheck", - "weaknessIds": [ - "CWE-662" - ], - "categories": [ - "Other" - ], - "isManualFinding": false, - "isSeverityOverridden": false - }, - { - "id": "fcdf2ced-2c10-4f6c-8caa-f58d9d4a06cc", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/fcdf2ced-2c10-4f6c-8caa-f58d9d4a06cc", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "TestNativeFileDocuments/domainmodel/TestMessage.mx.json", - "startLine": 5, - "endLine": 29, - "component": "TestNativeFileDocuments", - "type": "Access Rule found that violates the Least Privilege Principle (all rights set to Read or ReadWrite)", - "cweId": "CWE-272", - "severity": "MEDIUM", - "impact": "MEDIUM", - "exploitability": "MEDIUM", - "severityScore": 5.4, - "impactScore": 3.2, - "exploitabilityScore": 2.2, - "status": "RAW", - "remark": null, - "toolName": "SIG SAT Violations", - "ruleId": "entities-with-access-rights-violating-least-privilige", - "weaknessIds": [ - "CWE-272" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": true - }, - { - "id": "ffab3072-9a1e-4ddb-a513-e922fce677f1", - "href": "https://sigrid-says.com/aap/mendix-native-file-documents-demo/-/security/ffab3072-9a1e-4ddb-a513-e922fce677f1", - "firstSeenAnalysisDate": "2025-10-24", - "lastSeenAnalysisDate": "2025-10-24", - "firstSeenSnapshotDate": "2025-10-24", - "lastSeenSnapshotDate": "2025-10-24", - "filePath": "widgets/com.mendix.widget.native.AppEvents/com/mendix/widget/native/appevents/AppEvents.android.js", - "startLine": 827, - "endLine": 829, - "component": "widgets/com.mendix.widget.native.AppEvents", - "type": "The application was found executing string comparisons using one of `===`, `!==`, `==` or `!=` against security sensitive values", - "cweId": "CWE-208", - "severity": "MEDIUM", - "impact": "LOW", - "exploitability": "HIGH", - "severityScore": 5.2, - "impactScore": 2.2, - "exploitabilityScore": 3.0, - "status": "RAW", - "remark": null, - "toolName": "ESLint", - "ruleId": "gitlab.eslint.detect-possible-timing-attacks", - "weaknessIds": [ - "CWE-208" - ], - "categories": [ - "A1 Broken Access Control" - ], - "isManualFinding": false, - "isSeverityOverridden": false } ] From a1e64c7862c9b97cb62b8421b14c45c42f97400d Mon Sep 17 00:00:00 2001 From: Dennis Bijlsma Date: Fri, 21 Nov 2025 07:50:57 +0100 Subject: [PATCH 4/6] Include links to documentation. --- .../analysisresults/findings_processor.py | 1 - sigridci/sigridci/platform.py | 7 ++ .../sigridci/reports/osh_markdown_report.py | 4 +- .../reports/security_markdown_report.py | 83 ++++++------------- test/test_security_markdown_report.py | 21 ++++- test/testdata/security-previous.json | 2 +- test/testdata/security.sarif.json | 2 +- 7 files changed, 55 insertions(+), 65 deletions(-) diff --git a/sigridci/sigridci/analysisresults/findings_processor.py b/sigridci/sigridci/analysisresults/findings_processor.py index 814b1c04..ce94a916 100644 --- a/sigridci/sigridci/analysisresults/findings_processor.py +++ b/sigridci/sigridci/analysisresults/findings_processor.py @@ -43,7 +43,6 @@ def extractAllFindings(self, feedback): class SarifProcessor: - def extractAllFindings(self, feedback): rules = list(self.getRules(feedback)) diff --git a/sigridci/sigridci/platform.py b/sigridci/sigridci/platform.py index 5111eaee..cfefb474 100644 --- a/sigridci/sigridci/platform.py +++ b/sigridci/sigridci/platform.py @@ -16,6 +16,13 @@ import sys +DOCS_URL = f"https://docs.sigrid-says.com" +SCOPE_DOCS = f"{DOCS_URL}/reference/analysis-scope-configuration.html" +OSH_EXCLUDE_DOCS = f"{SCOPE_DOCS}#exclude-open-source-health-risks" +SECURITY_EXCLUDE_RULE_DOCS = f"{SCOPE_DOCS}#excluding-security-rules" +SECURITY_EXCLUDE_FILE_DOCS = f"{SCOPE_DOCS}#excluding-files-and-directories-from-security-scanning" + + class Platform: @staticmethod def isGitHub(): diff --git a/sigridci/sigridci/reports/osh_markdown_report.py b/sigridci/sigridci/reports/osh_markdown_report.py index 1b3204aa..97c3bbef 100644 --- a/sigridci/sigridci/reports/osh_markdown_report.py +++ b/sigridci/sigridci/reports/osh_markdown_report.py @@ -18,13 +18,13 @@ from .security_markdown_report import SecurityMarkdownReport from ..analysisresults.cyclonedx_processor import CycloneDXProcessor from ..objective import Objective +from ..platform import OSH_EXCLUDE_DOCS class OpenSourceHealthMarkdownReport(Report, MarkdownRenderer): MAX_FINDINGS = SecurityMarkdownReport.MAX_FINDINGS SYMBOLS = SecurityMarkdownReport.SEVERITY_SYMBOLS SORT_RISK = list(SecurityMarkdownReport.SEVERITY_SYMBOLS.keys()) - DOCS_LINK = "https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#exclude-open-source-health-risks" def __init__(self, objective = "HIGH"): super().__init__() @@ -55,7 +55,7 @@ def renderMarkdown(self, analysisId, feedback, options): details += "> Consider upgrading to a version that no longer contains the vulnerability.\n\n" details += self.generateFindingsTable(fixable, options) details += "If you believe these findings are false positives, " - details += f"you can [exclude them in the Sigrid configuration]({self.DOCS_LINK}).\n\n" + details += f"you can [exclude them in the Sigrid configuration]({OSH_EXCLUDE_DOCS}).\n\n" if len(unfixable) > 0: details += "## 😑 You have findings that you need to investigate in more depth\n\n" details += f"> You have **{len(unfixable)}** vulnerable open source libraries without a fix available. \n" diff --git a/sigridci/sigridci/reports/security_markdown_report.py b/sigridci/sigridci/reports/security_markdown_report.py index 8ee1223f..824af96e 100644 --- a/sigridci/sigridci/reports/security_markdown_report.py +++ b/sigridci/sigridci/reports/security_markdown_report.py @@ -15,7 +15,9 @@ import os from .report import Report, MarkdownRenderer +from ..analysisresults.findings_processor import FindingsProcessor from ..objective import Objective +from ..platform import SECURITY_EXCLUDE_RULE_DOCS, SECURITY_EXCLUDE_FILE_DOCS class SecurityMarkdownReport(Report, MarkdownRenderer): @@ -33,24 +35,31 @@ def __init__(self, objective = "HIGH"): super().__init__() self.objective = objective self.previousFeedback = None + self.processor = FindingsProcessor() def generate(self, analysisId, feedback, options): with open(self.getMarkdownFile(options), "w", encoding="utf-8") as f: f.write(self.renderMarkdown(analysisId, feedback, options)) def renderMarkdown(self, analysisId, feedback, options): - rules = list(self.getRules(feedback)) - introduced = list(self.getIntroducedFindings(feedback, rules)) - fixed = list(self.getFixedFindings(feedback)) + findings = self.processor.extractRelevantFindings(feedback, self.objective) + previousFindings = self.processor.extractRelevantFindings(self.previousFeedback, self.objective) + + introduced = list(self.getIntroducedFindings(findings, previousFindings)) + fixed = list(self.getFixedFindings(findings, previousFindings)) details = "" details += "## 👍 What went well?\n\n" details += f"> You fixed **{len(fixed)}** security findings.\n\n" - details += self.generateFindingsTable(fixed, rules, options) + details += self.generateFindingsTable(fixed, options) details += "## 👎 What could be better?\n\n" if len(introduced) > 0: details += f"> Unfortunately, you introduced **{len(introduced)}** security findings.\n\n" - details += self.generateFindingsTable(introduced, rules, options) + details += self.generateFindingsTable(introduced, options) + details += "If you believe these findings are false positives,\n" + details += f"you can [exclude the rule]({SECURITY_EXCLUDE_RULE_DOCS}) in the Sigrid configuration.\n" + details += "If you believe these findings are located in files that should not be scanned, you can also\n" + details += f"[exclude the files and/or directories]({SECURITY_EXCLUDE_FILE_DOCS}) in the configuration.\n\n" else: details += "> You did not introduce any security findings during your changes, great job!\n\n" @@ -64,7 +73,7 @@ def getSummary(self, feedback, options): else: return f"⚠️ You did not meet your objective of having {objectiveLabel} security findings" - def generateFindingsTable(self, findings, rules, options): + def generateFindingsTable(self, findings, options): if len(findings) == 0: return "" @@ -72,61 +81,22 @@ def generateFindingsTable(self, findings, rules, options): md += "|------|------|---------|\n" for finding in findings[0:self.MAX_FINDINGS]: - symbol = self.SEVERITY_SYMBOLS[self.getFindingSeverity(finding, rules)] - file = finding["locations"][0]["physicalLocation"]["artifactLocation"]["uri"] - line = finding["locations"][0]["physicalLocation"]["region"]["startLine"] - link = self.decorateLink(options, f"{file}:{line}", file, line) - description = finding["message"]["text"] - md += f"| {symbol} | {link} | {description} |\n" + symbol = self.SEVERITY_SYMBOLS[finding.risk] + link = self.decorateLink(options, f"{finding.file}:{finding.line}", finding.file, finding.line) + md += f"| {symbol} | {link} | {finding.description} |\n" if len(findings) > self.MAX_FINDINGS: md += f"| | ... and {len(findings) - self.MAX_FINDINGS} more findings | |\n" return f"{md}\n" - def getRules(self, feedback): - for run in feedback["runs"]: - for rule in run.get("rules", []): - properties = rule.get("properties", {}) - if properties.get("severity"): - yield rule - - def getIntroducedFindings(self, feedback, rules): - previousFingerprints = self.getFingerprints(self.previousFeedback) if self.previousFeedback else [] - - for run in feedback["runs"]: - for result in run.get("results", []): - severity = self.getFindingSeverity(result, rules) - fingerprint = result["fingerprints"]["sigFingerprint/v1"] - if Objective.isFindingIncluded(severity, self.objective) and fingerprint not in previousFingerprints: - yield result - - def getFixedFindings(self, feedback): - if not self.previousFeedback: - return [] - - fingerprints = list(self.getFingerprints(feedback)) - previousRules = list(self.getRules(self.previousFeedback)) - - for run in self.previousFeedback["runs"]: - for result in run.get("results", []): - severity = self.getFindingSeverity(result, previousRules) - fingerprint = result["fingerprints"]["sigFingerprint/v1"] - if Objective.isFindingIncluded(severity, self.objective) and fingerprint not in fingerprints: - yield result - - def getFindingSeverity(self, result, rules): - severity = result.get("properties", {}).get("severity") - if not severity: - for rule in rules: - if rule["id"] == result["ruleId"]: - severity = rule["properties"]["severity"].replace("ERROR", "HIGH").replace("WARNING", "MEDIUM") - return severity.upper() if severity else "UNKNOWN" - - def getFingerprints(self, feedback): - for run in feedback["runs"]: - for result in run.get("results", []): - yield result["fingerprints"]["sigFingerprint/v1"] + def getIntroducedFindings(self, findings, previousFindings): + previousFingerprints = [finding.fingerprint for finding in previousFindings] + return [finding for finding in findings if finding.fingerprint not in previousFingerprints] + + def getFixedFindings(self, findings, previousFindings): + fingerprints = [finding.fingerprint for finding in findings] + return [finding for finding in previousFindings if finding.fingerprint not in fingerprints] def getCapability(self): return "Security" @@ -135,6 +105,5 @@ def getMarkdownFile(self, options): return os.path.abspath(f"{options.outputDir}/security-feedback.md") def isObjectiveSuccess(self, feedback, options): - rules = list(self.getRules(feedback)) - findings = list(self.getIntroducedFindings(feedback, rules)) + findings = self.processor.extractRelevantFindings(feedback, self.objective) return len(findings) == 0 diff --git a/test/test_security_markdown_report.py b/test/test_security_markdown_report.py index 82e9e9d1..0f95bb15 100644 --- a/test/test_security_markdown_report.py +++ b/test/test_security_markdown_report.py @@ -57,6 +57,11 @@ def testCreateTableFromFindings(self): |------|------|---------| | 🟣 | [Security.java:33](https://example.com/aap/noot/-/blob/mybranch/Security.java#L33) | Weak Hash algorithm used | + If you believe these findings are false positives, + you can [exclude the rule](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-security-rules) in the Sigrid configuration. + If you believe these findings are located in files that should not be scanned, you can also + [exclude the files and/or directories](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-files-and-directories-from-security-scanning) in the configuration. + ---- @@ -129,6 +134,11 @@ def testLimitFindingsIfThereAreTooMany(self): | 🟣 | Security.java:33 | Weak Hash algorithm used | | | ... and 3 more findings | | + If you believe these findings are false positives, + you can [exclude the rule](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-security-rules) in the Sigrid configuration. + If you believe these findings are located in files that should not be scanned, you can also + [exclude the files and/or directories](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-files-and-directories-from-security-scanning) in the configuration. + ---- @@ -153,7 +163,7 @@ def testReportBasedOnDiff(self): # [Sigrid](https://sigrid-says.com/aap/noot/-/security) Security feedback **⚠️ You did not meet your objective of having no medium-severity security findings** - + ## 👍 What went well? > You fixed **1** security findings. @@ -161,7 +171,7 @@ def testReportBasedOnDiff(self): | Risk | File | Finding | |------|------|---------| | 🟣 | [Security.java:33](https://example.com/aap/noot/-/blob/mybranch/Security.java#L33) | This finding has been fixed in the next snapshot. | - + ## 👎 What could be better? > Unfortunately, you introduced **1** security findings. @@ -169,7 +179,12 @@ def testReportBasedOnDiff(self): | Risk | File | Finding | |------|------|---------| | 🟠 | [Aap.java:33](https://example.com/aap/noot/-/blob/mybranch/Aap.java#L33) | Some other finding | - + + If you believe these findings are false positives, + you can [exclude the rule](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-security-rules) in the Sigrid configuration. + If you believe these findings are located in files that should not be scanned, you can also + [exclude the files and/or directories](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-files-and-directories-from-security-scanning) in the configuration. + ---- diff --git a/test/testdata/security-previous.json b/test/testdata/security-previous.json index b4e52349..03c977e5 100644 --- a/test/testdata/security-previous.json +++ b/test/testdata/security-previous.json @@ -19,7 +19,7 @@ "help": {}, "properties": { "tags": [], - "severity": "Medium", + "severity": "Critical", "analyzer": "Google ErrorProne", "language": "Java", "category": "CORRECTNESS", diff --git a/test/testdata/security.sarif.json b/test/testdata/security.sarif.json index 2dfc0d85..6311a2b6 100644 --- a/test/testdata/security.sarif.json +++ b/test/testdata/security.sarif.json @@ -81,7 +81,7 @@ } ], "fingerprints": { - "sigFingerprint/v1": "0fe24dfe0b8c90ae48620e02865b9a3b399b49ea4ef5e020d83e9507d614ebcb" + "sigFingerprint/v1": "0fe24dfe0b8c90ae48620e02865b9a3b399b49ea4ef5e020d83e9507d614ebcb22" }, "properties": { "tags": ["CWE-327"], From 48147c1a8b20e136d9a98a70fdab354269bb10ae Mon Sep 17 00:00:00 2001 From: Dennis Bijlsma Date: Fri, 21 Nov 2025 07:58:19 +0100 Subject: [PATCH 5/6] Enable security (which won't work yet). --- .github/workflows/sigrid-pullrequest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sigrid-pullrequest.yml b/.github/workflows/sigrid-pullrequest.yml index a1c3c15d..918cdf3f 100644 --- a/.github/workflows/sigrid-pullrequest.yml +++ b/.github/workflows/sigrid-pullrequest.yml @@ -15,7 +15,7 @@ jobs: - name: "Run Sigrid CI" env: SIGRID_CI_TOKEN: "${{ secrets.SIGRID_CI_TOKEN }}" - run: "./sigridci/sigridci.py --customer sig --system sigridci-client --source . --capability maintainability,osh" + run: "./sigridci/sigridci.py --customer sig --system sigridci-client --source . --capability maintainability,osh,security" - name: "Save Sigrid CI results" if: always() uses: actions/upload-artifact@v4 @@ -44,6 +44,6 @@ jobs: with: customer: "sig" system: "sigridci-client" - capability: "maintainability,osh" + capability: "maintainability,osh,security" env: SIGRID_CI_TOKEN: "${{ secrets.SIGRID_CI_TOKEN }}" From 5061c2ef27013c60c24608bde4f6a493dbb3956f Mon Sep 17 00:00:00 2001 From: Dennis Bijlsma Date: Tue, 2 Dec 2025 16:23:01 +0100 Subject: [PATCH 6/6] Update Security CI feedback based on Cheer's design. --- .../analysisresults/findings_processor.py | 22 +++++----- .../sigridci/reports/osh_markdown_report.py | 2 +- .../reports/security_markdown_report.py | 18 ++++---- .../sigridci/reports/security_text_report.py | 7 +-- test/test_findings_processor.py | 15 +------ test/test_security_markdown_report.py | 43 ++++++++++--------- 6 files changed, 50 insertions(+), 57 deletions(-) diff --git a/sigridci/sigridci/analysisresults/findings_processor.py b/sigridci/sigridci/analysisresults/findings_processor.py index ce94a916..24ca6b20 100644 --- a/sigridci/sigridci/analysisresults/findings_processor.py +++ b/sigridci/sigridci/analysisresults/findings_processor.py @@ -24,26 +24,23 @@ class Finding: description: str file: str line: int + partOfObjective: bool class FindingsProcessor: - def extractRelevantFindings(self, feedback, objective): - findings = self.extractAllFindings(feedback) - return [finding for finding in findings if Objective.isFindingIncluded(finding.risk, objective)] - - def extractAllFindings(self, feedback): + def extractFindings(self, feedback, objective): if feedback is None: return [] elif "runs" in feedback: sarifProcessor = SarifProcessor() - return list(sarifProcessor.extractAllFindings(feedback)) + return list(sarifProcessor.extractFindings(feedback, objective)) else: sigridFindingsProcessor = SigridFindingsProcessor() - return list(sigridFindingsProcessor.extractAllFindings(feedback)) + return list(sigridFindingsProcessor.extractFindings(feedback, objective)) class SarifProcessor: - def extractAllFindings(self, feedback): + def extractFindings(self, feedback, objective): rules = list(self.getRules(feedback)) for run in feedback["runs"]: @@ -52,7 +49,8 @@ def extractAllFindings(self, feedback): risk = self.getFindingSeverity(result, rules) file = result["locations"][0]["physicalLocation"]["artifactLocation"]["uri"] line = result["locations"][0]["physicalLocation"]["region"]["startLine"] - yield Finding(fingerprint, risk, result["message"]["text"], file, line) + partOfObjective = Objective.isFindingIncluded(risk, objective) + yield Finding(fingerprint, risk, result["message"]["text"], file, line, partOfObjective) def getRules(self, feedback): for run in feedback["runs"]: @@ -71,6 +69,8 @@ def getFindingSeverity(self, result, rules): class SigridFindingsProcessor: - def extractAllFindings(self, feedback): + def extractFindings(self, feedback, objective): for finding in feedback: - yield Finding(finding["id"], finding["severity"], finding["type"], finding["filePath"], finding["startLine"]) + partOfObjective = Objective.isFindingIncluded(finding["severity"], objective) + yield Finding(finding["id"], finding["severity"], finding["type"], + finding["filePath"], finding["startLine"], partOfObjective) diff --git a/sigridci/sigridci/reports/osh_markdown_report.py b/sigridci/sigridci/reports/osh_markdown_report.py index 709a0f25..96216f5e 100644 --- a/sigridci/sigridci/reports/osh_markdown_report.py +++ b/sigridci/sigridci/reports/osh_markdown_report.py @@ -84,7 +84,7 @@ def generateFindingsTable(self, libraries, options): for library in sorted(libraries, key=lambda lib: self.SORT_RISK.index(lib.risk))[0:self.MAX_FINDINGS]: symbol = self.SYMBOLS[library.risk] - check = "✅" if Objective.isFindingIncluded(library.risk, self.objective) else "-" + check = "✅" if library.partOfObjective else "-" locations = "
".join(self.decorateLink(options, file, file) for file in library.files) md += f"| {symbol} | {check} | {library.name} {library.version} | {library.latestVersion} | {locations} |\n" diff --git a/sigridci/sigridci/reports/security_markdown_report.py b/sigridci/sigridci/reports/security_markdown_report.py index 98c5d9f0..0dd8c7e5 100644 --- a/sigridci/sigridci/reports/security_markdown_report.py +++ b/sigridci/sigridci/reports/security_markdown_report.py @@ -43,8 +43,8 @@ def generate(self, analysisId, feedback, options): f.write(self.renderMarkdown(analysisId, feedback, options)) def renderMarkdown(self, analysisId, feedback, options): - findings = self.processor.extractRelevantFindings(feedback, self.objective) - previousFindings = self.processor.extractRelevantFindings(self.previousFeedback, self.objective) + findings = self.processor.extractFindings(feedback, self.objective) + previousFindings = self.processor.extractFindings(self.previousFeedback, self.objective) introduced = list(self.getIntroducedFindings(findings, previousFindings)) fixed = list(self.getFixedFindings(findings, previousFindings)) @@ -78,16 +78,17 @@ def generateFindingsTable(self, findings, options): if len(findings) == 0: return "" - md = "| Risk | File | Finding |\n" - md += "|------|------|---------|\n" + md = "| Risk | Part of objective? | File | Finding |\n" + md += "|----|----|----|----|\n" for finding in findings[0:self.MAX_FINDINGS]: symbol = self.SEVERITY_SYMBOLS[finding.risk] + check = "✅" if finding.partOfObjective else "-" link = self.decorateLink(options, f"{finding.file}:{finding.line}", finding.file, finding.line) - md += f"| {symbol} | {link} | {finding.description} |\n" + md += f"| {symbol} | {check} | {link} | {finding.description} |\n" if len(findings) > self.MAX_FINDINGS: - md += f"| | ... and {len(findings) - self.MAX_FINDINGS} more findings | |\n" + md += f"| | ... and {len(findings) - self.MAX_FINDINGS} more findings | | |\n" return f"{md}\n" @@ -106,5 +107,6 @@ def getMarkdownFile(self, options): return os.path.abspath(f"{options.outputDir}/security-feedback.md") def isObjectiveSuccess(self, feedback, options): - findings = self.processor.extractRelevantFindings(feedback, self.objective) - return len(findings) == 0 + findings = self.processor.extractFindings(feedback, self.objective) + relevant = [finding for finding in findings if finding.partOfObjective] + return len(relevant) == 0 diff --git a/sigridci/sigridci/reports/security_text_report.py b/sigridci/sigridci/reports/security_text_report.py index 9bc7ddb6..e667c139 100644 --- a/sigridci/sigridci/reports/security_text_report.py +++ b/sigridci/sigridci/reports/security_text_report.py @@ -27,13 +27,14 @@ def __init__(self, objective, *, output=sys.stdout): def generate(self, analysisId, feedback, options): processor = FindingsProcessor() - findings = list(processor.extractRelevantFindings(feedback, self.objective)) + allFindings = list(processor.extractFindings(feedback, self.objective)) + relevantFindings = [finding for finding in allFindings if finding.partOfObjective] - if len(findings) > 0: + if len(relevantFindings) > 0: print("", file=self.output) print("Security findings", file=self.output) print("", file=self.output) - for finding in findings: + for finding in relevantFindings: symbol = SecurityMarkdownReport.SEVERITY_SYMBOLS[finding.risk] print(f" {symbol} {finding.description}", file=self.output) print(f" In {finding.file} (line {finding.line})", file=self.output) diff --git a/test/test_findings_processor.py b/test/test_findings_processor.py index fa89f586..01d66696 100644 --- a/test/test_findings_processor.py +++ b/test/test_findings_processor.py @@ -26,7 +26,7 @@ def testExtractAllFindingsSarif(self): feedback = json.load(f) processor = FindingsProcessor() - findings = list(processor.extractAllFindings(feedback)) + findings = list(processor.extractFindings(feedback, "HIGH")) self.assertEqual(len(findings), 2) self.assertEqual(findings[0].risk, "CRITICAL") @@ -34,23 +34,12 @@ def testExtractAllFindingsSarif(self): self.assertEqual(findings[1].risk, "MEDIUM") self.assertEqual(findings[1].description, "Some other finding") - def testExtractRelevantFindings(self): - with open(os.path.dirname(__file__) + "/testdata/security.sarif.json", encoding="utf-8", mode="r") as f: - feedback = json.load(f) - - processor = FindingsProcessor() - findings = list(processor.extractRelevantFindings(feedback, "HIGH")) - - self.assertEqual(len(findings), 1) - self.assertEqual(findings[0].risk, "CRITICAL") - self.assertEqual(findings[0].description, "Weak Hash algorithm used") - def testExtractAllFindingsNative(self): with open(os.path.dirname(__file__) + "/testdata/security.sig.json", encoding="utf-8", mode="r") as f: feedback = json.load(f) processor = FindingsProcessor() - findings = list(processor.extractAllFindings(feedback)) + findings = list(processor.extractFindings(feedback, "HIGH")) self.assertEqual(len(findings), 1) self.assertEqual(findings[0].fingerprint, "0006d9dd-5288-424a-bf8b-077c98ef00ee") diff --git a/test/test_security_markdown_report.py b/test/test_security_markdown_report.py index d6ba0156..b75af72b 100644 --- a/test/test_security_markdown_report.py +++ b/test/test_security_markdown_report.py @@ -51,11 +51,12 @@ def testCreateTableFromFindings(self): ## 👎 What could be better? - > Unfortunately, you introduced **1** security findings. + > Unfortunately, you introduced **2** security findings. - | Risk | File | Finding | - |------|------|---------| - | 🟣 | [Security.java:33](https://example.com/aap/noot/-/blob/mybranch/Security.java#L33) | Weak Hash algorithm used | + | Risk | Part of objective? | File | Finding | + |----|----|----|----| + | 🟣 | ✅ | [Security.java:33](https://example.com/aap/noot/-/blob/mybranch/Security.java#L33) | Weak Hash algorithm used | + | 🟠 | - | [Aap.java:33](https://example.com/aap/noot/-/blob/mybranch/Aap.java#L33) | Some other finding | If you believe these findings are false positives, you can [exclude the rule](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-security-rules) in the Sigrid configuration. @@ -122,17 +123,17 @@ def testLimitFindingsIfThereAreTooMany(self): > Unfortunately, you introduced **11** security findings. - | Risk | File | Finding | - |------|------|---------| - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | 🟣 | Security.java:33 | Weak Hash algorithm used | - | | ... and 3 more findings | | + | Risk | Part of objective? | File | Finding | + |----|----|----|----| + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | 🟣 | ✅ | Security.java:33 | Weak Hash algorithm used | + | | ... and 3 more findings | | | If you believe these findings are false positives, you can [exclude the rule](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-security-rules) in the Sigrid configuration. @@ -168,17 +169,17 @@ def testReportBasedOnDiff(self): > You fixed **1** security findings. - | Risk | File | Finding | - |------|------|---------| - | 🟣 | [Security.java:33](https://example.com/aap/noot/-/blob/mybranch/Security.java#L33) | This finding has been fixed in the next snapshot. | + | Risk | Part of objective? | File | Finding | + |----|----|----|----| + | 🟣 | ✅ | [Security.java:33](https://example.com/aap/noot/-/blob/mybranch/Security.java#L33) | This finding has been fixed in the next snapshot. | ## 👎 What could be better? > Unfortunately, you introduced **1** security findings. - | Risk | File | Finding | - |------|------|---------| - | 🟠 | [Aap.java:33](https://example.com/aap/noot/-/blob/mybranch/Aap.java#L33) | Some other finding | + | Risk | Part of objective? | File | Finding | + |----|----|----|----| + | 🟠 | ✅ | [Aap.java:33](https://example.com/aap/noot/-/blob/mybranch/Aap.java#L33) | Some other finding | If you believe these findings are false positives, you can [exclude the rule](https://docs.sigrid-says.com/reference/analysis-scope-configuration.html#excluding-security-rules) in the Sigrid configuration.