From 99ba38ae3073a4ef8b649725a767e0a73d15022d Mon Sep 17 00:00:00 2001 From: Hayley Denbraver Date: Wed, 18 Oct 2023 18:25:10 +0000 Subject: [PATCH] commit range post Signed-off-by: Hayley Denbraver --- .../commit-range.png | Bin 0 -> 46616 bytes .../introducing-broad-c-c++-support/index.md | 94 ++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/commit-range.png create mode 100644 gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/index.md diff --git a/gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/commit-range.png b/gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/commit-range.png new file mode 100644 index 0000000000000000000000000000000000000000..3329d08622b15465e9c0b06fcf24474548634176 GIT binary patch literal 46616 zcmeFZXH- z$qZ@8d_Cv9=Q-T>Ip3det?$?StTk+1Grf0r*RHOvx~i@YeX6QJc;oI33=9lHB}Lii z7#KLj7#Nr?c-O%>&>h-(DlgdXV+jkD(s*P;uK9@{=q*HD)O8 zT{;GOtpEJH!dHa;!XUvUf&9nky?X}Ff4hYNB8DkPD?6ZS5$1;%^0$wqG~~Ved&qRY z{D1p#ABXAxj~hd*k@T8{dKx)T@4+jq6PTHqzvjv8Eq0q6@2ym&in@JU|B)|LZ8K4N zh?@1aX#e^`uS_w9AwDH#!=0s+$JMCBtS4T!Bcn3>uajvb@lU)(97fLZx~TD@cBw0- zRk*z#hEk>2CE%=XDy&A_u>O_de~+G?x;I&HfYxJ?B$>}bwX4+O#IAb&dflI_@chSd z54WnZaf!wkyJHIs8+~|Kn9A*@C+%ui@53u?b!#cV5?J2FWi-(9J{TFTaki*CoV0G` z?eALe(9ym|K>p@tt;@RkfW+mGNJ_r@qq#XJ{~_;}IL6PR)r%jLZRVQ%8?N8G&aPX@ zo^`#_7CxHheK?WPNpy#sK3~S|@*D+UN-(6|pDG&=hmRKOQ$3@J>X2f7{IS^3_k2YE zbxR<=_Cwk!=K-N_uB*J zTZ7@>v(whBiOZ_J$V2OQS_oX1lPqdwEc!l~8G0YYZBEyXMTu?+CG(nvo$vN=-3vcH zN6qS23m^6g&fd8kNaD*LDKeaWM?~}b@@!9yNnPk+ry^A7VdAh0Nht1W%hv$8zbbwy zcs*pq4l|BB+R{xY9`T&)dey%|TJ zYYBwnmW+v#5*rt(y=45W+WSY`gE%8FkFV4Eo;i-yet(gD66oi;IXRK5p7*x0_DK@2 zM!lyCilzqt^+@j0h4=ZvShkQ)M+D{fw!pjmueDZ(zD_$b%11c(GHO7N7h@ZoQQNcj zz8A+9iU^@y+sX2hu-j~t%>lT!NJP6T#{8@mB|eRs#QB>%y_(XVzGCyfyQj!bI@^IX zF)6i!HQj25SFo*`l_{R`^>zxweVS;a7K{0O?J{$XDm(qpTgd{pP6veTV~x~8Rj)^W z^5|CCrFw(+%(*RX&aNwY)}6qW-t4>Fo8&sGZBf&}{2@?0tKW*b<%@S;vY=ZG%OVrK z1kSn4t)JlC4X@EsxC~W0nusnZn&>Td1D!B)Ug;XK**iiio$t@TZv4uWseILX{dBWxc4~G$;*2)p>nDEe+DgaEe7%~X*JFj7s=6h{ zK|uM%O-Tl$LT}uDIIhH!YI>&PO{qY}q8d>{eb36ZlIU;t2TzH9xeYsIj;~*+Ral~G z#xrk#)d%R49%;ML@^*R9`nnMo4g;p}?G{QUD#xE#k<5hNC;N^{SbNKT$p~xe-HY>6 zQ5OD>&+Mb5BzFW;dZYrbPgtaT$FKcXT&wduc+H5C;chMQI$6z54WP8t+a6S)bLscU z7;Ffp_3WCgvfs{()6!?Xk8oTcEvWQ5cA`*1*y~YTD95uasT-0S%=nyc z+TjzZx@6oF-`|+v`@$Egg^?Z4q5DlFVTrwJ+BMmBwn41jEwc?92d{%ORMKr@eEx&e z^&SGpr8vz={xQ7;*&NAMRt5H5oWiEQw0*@c|zIyx>L^J^n{3FrI6YOJbaq~HnLKr4Tk5(*lG#8VQlrIBy5wk#LavoZ zcH#SWrkp&t_hr*A{SrwdIvPg7MO*3nHWXKZ_x|{+g{``6*D=`*#$5l9J4Li!^4^z6 z3(=1{Bmb^AA+}gN%(QbUh%d%zpIdF%L}`oy3&3T#<7#eP63a)e!Z}+zt7Vo&>rg{J?ysg{Dnaqrs@_;x|eZ{^NK6{tfY^rEsy#yM|w2Zrl=I5`q0)(9b0Zu0g9 zeOR%cKTliz`lftKy_C11&+*brX@#(`b&0?E7ZdL!pM>IWSUU6zuL!xXr294ysH0{p zd0viJNNhg)EMLRFb*JCJvsXDWL?(ocuHS({)Magv=+$)*2f|Zb`+BqddlrYcSKt!C zQk_vW-u;|)Qd2Ht`mCICM3`&RzvXgVj#pI@6^|rzMMz(9TMaQKWH-&8UBgO|jt_Nz zXQG#Xd?p_FS7k^VJi7$C4Ei50dgdO9TgYCM4*X!Hl)_g=VI8@$pJ}d^JE|o8B&wuJds>Dx{ZaAml0F!tNhZLVc%sgn zQVrB)(7WHJv=Mua3(B2G&B-O5Q~6C3O7GdKT&!r?4y2uyWtl~*)fmNNqQ(?tVbT%d z7<$98ty>h5h_{;t+v@%p7;4auokbWTg8%4J+j(-O&kNSc;|k#$_r^A0*QeKJ=r5$0 zmU@XdcrPu+YgqT8^oQQO!rF%jxbW2TTY=mk{J+J0DREgJReeLx!))TS&=IM+@d}?{ z6JM`ECMp0ZQU6FxW9X+H!OJBoe?)Uk1b(6auiys=N|O}4yBF`_QuqJrkwPSJjOC#_ zZn6&2KWHc!9XZVpHeH{ zpXX4!bk2UhEr5}dY=$4A3Hj9Z0zuis0fD6XUU+O)Ly&(4{r|EIAaL}gLLS|ttAiA4 zNT8?Elzcmzw%0P4uk_F9Hr^Z;Eq6~Zx#w!dei*KQlx?-h!V}mtyx-wVMEQFb^!LHmEM~roUB!O$U3l-N(8J6P%TQdQ z*S#kndgea9P<8CyWT?QU^ZK=<)P%=}YU!`v(}vU9)X84%f*1Bwf$Qx;5QTw5*>21v zXl0atz_N>N@o~}jB3>PV8A?jU|9UZ3`V{Cuh{z7k{k48x5?_<$nN#+sP@@(6czh#v zMgvwGsOylv)&SFCU>i?VCWAWUhh1^i9^u3A8 z&7BNQhrzdEZV?BEFnKnkCk%oC0cy2~z&Ap^7acnL{MMs51&qQFyl0(V3r+EE2DF%! z9!zx2Thn!^IdhHE8NRPkiImjTmzDenUJ^l>Su#O=FA0AHW@iMIV1E@1N15c#i?kR>DF|1#8vTWdqfDQ;FU4At#kBk8 zJ&6x{-x;7t?0OsN8ipspd64wiXh8Ci9zuq|Trcl_9nBL?lh_+QaBi`VuZgN;T@?M$ zQvux6)a@XjJ^M@9cS1bPPRw(G8ekvXr~$^p?uJEFKu-dfz0GC_wmd1+`~ZL3LgUlT zeI{w9q?D@m%u5IQp|>a8J(2UkBp-~~RbjMj*ULuCw=CBXdE7cm&cSt+GSZbwF_6Wy zKb*R(Ep9$;caSEzugKfgf6YdvE8Zvn74a?e9AfM78uE91DzrE$^Lzu);m)*eUKwbH z-dY>cb)nhc!GAFASEc6MC99h=J3QJc6>?rFVXJbq5I&>x3cf~03~~NZAVT5-q0@4e z9#ZTN!tVE;Q@xql7SM#GvRNfe_rSvIp{~Av-o<~qzq&w%3tSjH>a%7o21&4L?h4v% zFwiRg2)PC?V44KG!pBIVGF!NS;KhW_t!H0s;g#Z!_Y=oIiqS^qe*LR#{UrR^DTsF$ zyBEwI9XA}(lKAg;>t$3}4R=tyj*dn21v=|hv!e`z#|(YzRnnls>NP^~LLcWN-k%$3 z?{=p}OU?_A_?yjj#SAz3YK)4$d+%tzVdcwhVucX}U0;-;%sdYKgL^jy3y;|U-LGb0 zm$l#c+V}YmX9{m#;PSkntFAXGmgZH4;;Fwfub%MaaY&ZWk{Ws}u9(!^hJ6y7bKQJI zMtjaR-hTm-oudB`%E*NQ7iFNn7xrPpr1b@bB$(&Y+ijlz#-D?WHt{D7c{I*UBy=>z@R@*+#=MG}!81-JNQpho1W zG!QN2ZG3*A8KK?~oaS9(ZdJ%L5!a1B;ZJuu?%>}FF@#C8kB{ojWB{ z3&C_gJ93ZSulO&K_`5QhV9iJJkUY?PpYfq9d38A3Vw>g5>%ZD%hB-Xb8g~fSc~dX1 zHQezcfy;19x`vTIUJ~+J?St$t)0Y)JYPpu9@Y`(W@G5&ZWs0}L!~QPKHRd%~p%nO= zE6_`q!_2k*=hx!pi(MFdB!@_a7|b9WLiP&bV3QYid|O*8du<-0<3gB9T0fYY6xh2r zS!BwOq?a=BT*Q?b=ahxZ6ZQh+GO3kBu?K><-a=Y18GeC4jFB^KnsWRZmH;=y{O1H} zUT$9*`AGbqnGLrezI3oLYD@g^H_O{b3=k{iaDwC52T3IT*4@Nz!j?>y$8S?;g$@=G zcyX4GV)L>Pf5!ua!A%oCuor4hNQsAL>+o>cgYN}Phm&)73G*v%t!~!7zj*HQ?yrkV zGK&o0Reu=i-@&&-ac!L4J89h798^rQU*q9!RL*VQm+Jebl5B3n@t6qbZ??`4PgX_} zA@%6@oBn6_B;Pg>jpDnESPbvQ@P8NR3c@t>D#)*DoBtDfph{#Jxr!tZ{|z;u&xhMG z6<2{a`UN~iXqQm@LnRzp`Y7=Kkk9=uUt9&DqZ0jqKP;bv1-?YYfd9L1s8@j2|ML`j z9iWm~%-MVB2A@EK>Ma9))vFCs0Wkc9ERl!;lSJ_*XiWM!edO^K{q^rccN`HLMG6{l zqZ{P6j_6%&Pz;`6>4%0#B_ZJVN9_OZ9*kp70{z|He|(4V@A#{q_h47jyljKwwZgOXI)yP1j<*8;t@mZ&OMQ$|IMvjW#Db>+(MKu|wuBj~U{_BuE zWksCrWn;{3tHG9B!s@X@`zcd`S~ube$C2wq~ZBAMc#F_MA_+1H8wJDN*KXeBHYAu z5L0^v4(Hc3j+c|4hu{XgZI*kp#cR)m#c`;Ge%R6in}!Qn4nG4V!mkZGlHiJXFiDQ0 zCH2B^ef7s@4vTbcBRhP|j(ZZSY+qzgEITgb|KzCB+A@~&E>N3noc;E@z_wFws`)h` zCFvVIo8w~(T?bpiJb@#8wy~PBjwqmGZ_#NEdYS_Bt7#5dS^BNEfa&mr@m^O8-K4z2 zlDotbcgWwi1%z~j5Rv)^GJ*GYuTDSm>Jr400ykkh(XjtGmd_LTwRgw9TU zN@r9cDoYXee!xWgrvYdSo}47m-oI{PXA0;}BMrUHldMu9yN%JmnvD1ZF?F#OOS(-B0Y!=Y zte0)g?n+gCo+dnESha#z)1?eZgb7Jct57=0ghlxTsO)uYb;qlNnE*N%io4&D`-*Gg zlSNu7L!Yh=lCQtK&oHV&Y|ldXoLHhHOGUM~_4II}R!~8E$RE4%u*O0USEFIwuE$sJ zHrsTeei+e+9l?aBSKclIgdfcK+2`TVtDQJ1qSbG)HQ4reL2Z22KDu-<0GHh&lfl*I zvaX;dPP3X5TJ4gjVm->F?nW-UV3UWM%mb_3AtO(T;k^M^!b8eWI z68&KjO*6h9y~L(D>a^TLF>sz!38ZAo4MstE^JV*0iJ4ksIdagNuBSa)0&BhWBUqm7 z?M2~#dF&luPu2Q5kliF1QMiwF|X!h|Mk?P?2CR?tE_ z%#Z?D*AR6ucH;_*mt0pChkrhL6JX0({{&>jgWd#s-C`a-xDxd{+(H{Z3;|t<<*qok zKQZ$S;Te{0it-;xRx6AV)r+Ql7mK}=WFtyn9)GdO|LS6+GaJ0{)AhU3DXLD!X}QnZ z<8gdME>+YQA}jr;2q~Sw{rW3@m?Q&1bg^uG_xK z!8rnkt5p)KR?54QPIr)a4C}oE7qf3rr*g3WZDzU@nrGxvu-rY)g9-qopqZK)od_a0K{9&ZV1 zB@u9jc)GLuu33rxFsU1H-yh8B>B=P|!TOf&nL9!$Jal91JJ~aSqU{NjM!_75zHd*I zUqBUs{T1*!3yoWU^L?o+RWxh2>?Ff7k-9*{K5ZwqfEwEMDdLi|Pr2XHt&j#@)JWsp zVI>tky}wyixwSMu`e$!oh@EW;lP%3-l*mSlPQ&YlOSJi6JtJ~1q*jCFFX~6>e{`Gp z!v~wwbUyagCQP=;MI3meYwGPBr~CnYv1+q$nyK18BAXeTYf++{BfW?7-ltQ-d4_k* zh4&Uq!lv!ZsfC?&{Bt{x-}$l7-YV1`I4sby3R)jgTZOPNPoyoe>nj$L(a&H?(^uF3)EBkuo;(ziI(Wzs6Td z%dzRLAHCen=&xJus|rZIEMbVG(oI9Ozo3yxbvrvwSn7&}hwnDP{Oon!8_XqscP6W&>H@ zSqJ{Y-rO=r#>EL$zE)3seBRUMTP8sb6Cze0Y`wO{^7w5M^DteqeM?$lsLAHO zWDd6yZ&2?kc(cN(;k+||c>7icRA*X?5g?vOgDNChOC-r1W>$kLD58ByJ z(ObdR@m_v^I9IKSgI{IT=_t|mjLGps%~CM}a;+q`qSDvrr(dmiY|objb${1oFBNI@ z5!p?eda%7LzW!N3Hwx;ZC(NDX+e%pJJMGzNI`H;bqv2FVV<}#I3pV+-H6hPPN?F{i zYge=A74B$$iFcmnB)-I1;$yw$=2XYg2@TsFBet2`rA8N($EB;;l_hs&-f1D@Ii?f> ze-5lpb$?PzUH*C47SPhCqqW;`?&^N(sx0Ewb=OCvgXIVHOx=Kanp>KQultItHIKd!)m~wNB>9Srv8ud*W#!jaYDyTvlW#pspjFHhYotg z+f!!UxWroZZZjobWa9L_gCH>xLNUhC1sDR^8D2H z@${rdh9^gl`j=uVHK92dg~(Fr&apH56t9Cg6S>*v@~f))`6mIyvQSkBas15mz;66Q zTVVoQU`7>0EUQy?@pi9D{=;HJBF`X?^W)95@ERDr4u?5RbmkcHs&{JyB zAI`xvlMQ{lad~rvhU;;fUM|zSdjpk6qq<<(8iQ5i0k1O+UC=~D3bMOpO0%v}sX`Uk zY5Q_uEVm>>aY=|dXs+&0?=f%?&!Ji;JB*cX$Gl*(w(j@nC`p^${CNxEKUT%ATs&2i zf8ve(*40g?hx`V$?+=>G-;L|%j)ATh$Y6eVi}F+7FNo%-Ssxc+3?~X!W0+<^Y0^qX zS?%Xpf|`#E>Tw;{ zH^7jj$=*mg4U6A!jePAF!0zSGHVKFNrun?PEsT`S6SmCg6GB1r#`7$4zfw|lMpYaz zD(HMx6IXhc8aF^xflVc-)7Km@wbFB)s8R-Ad2$EXqzaa_N~Z+ZH)R{ng|(AmspCJR z&Kuv)-&TBHZ`Jqd3n}r@3|qEhPwd7~=0L4tlr{}lMX9D+Md>CS-oe#S9v3ZP7b$)@ z6-p}0(p!@s9tXYj60Ou!a|`8&^(nbc3^h{mNtwH7v{>cs(fwAwjvG;{V(*0Vvi)$dv{2ncP?eTT% zvuR>ZC;y~#i2;$}*MzNzUtH#l16{KMW0v^QZ?&^ z=VSAHWt+p7#d7s9?LF2PQGY-2@qY1n zy|=8fkYrI{y8gn;jI(-4qer(SE8NLJnH!xXo*Zb%&5Ns@!(y9V;!TE~6Kd?{m*t-= z=|BIyR7Aj8`qLvu^+2e`AH^yPmbj%p5shpg5rkS zqmH!p@Pfl%7B4>D4t4+Kurb!)Md0gun50YkG{>AUd3J@o$M9>Idi@@eVbc1H$C!Zk zZVCU%{tFc4(!h@$1~$)KC5`Vex0OF9RLb|3-~1R?P27o1IfE*zYB(uzxftb=4EcmqvTyte~1?I>x@%Wg*Qh9t?t;#KPHNEH8h_(6^?C7cN%e z*!n1e14l$snb!T6(_*jL2wfOEQ|c5>2sy_$6#`)!-#qQ(h3QhfA6|HFo;b z?5CxtTV>{CEGI390OlvAlr2%K!v$MA2`_$2kRmg>+YF~XPbFnAr1o>%RRm`>(XnzI zHttu4Gws~wExcs$v!<|eODldlIvbD2A01X~&X+WkXEz@LEpZA%?0tNY^zfOH(EYNa z>Y*s%OK6_MQk>K&OQQRn<7-~W4@*TayA!BdB}$e{o1@{G9J+chJDYt4;LG?DI2?^y zc^VpX<0h9tMM>`uHMXmYbU)OGsf0Q6=|JZud+2`5ep31L@jF7wbDJg<7k^hd`!CTc zH4i#MxoET6nCSWGTFs;k0w9@S8>fO#t}Vn8HQbIi$HOu#DYW3BqLEx^Y@O?1^X?_@53mEoELHNjY(g}PlGzdi!9-(gjm zv(hP5kPq%?)w@BxpD;!CcGR0)pJ8Ue$!(u396W+O88|Xdk6(sJgyg zpO8BfILcMy=2y}xlbUd$g4H$Tm$Z^*(wBXi#IPb=EFWxAx^oEUuy23Nnni!sgLj{H z!=QZJT;HLvB2gIbbo&A1C6r#8`O;BcCZ0-bApaKeXoJ|KfbT^T|Jl*PliS2YFtn%s zhvaj>Rm?-S3B7ZOFH*t<>{3R&tv?b(8uIO`=pKx>vL5$gO|?$w{d`mViHDjI%qu%1r@8?v7TGdfSG=5omEXzIeg!C)a-B49f;%kE0+JvIA8e2rQgu9Ct5Y8> zUczv&CcpncIoh3jFY8d_q_m$?hrwaWxulQm{y12vZVP@5EkCBoLt3=lha+9j2)HJB zEKH@rat>WX_*!!!Mq`)*h8L``OW#NDj?#} z5Rpw;^`HJa8@Su7Rv|-szQZ1QrR`Z&{~(hW72_hTb-n1zpRrv*RB5i;bP|Fu9;df) z`E`$a@%yDB9sc%SD<*`06@m0_Cbqe-lTNdU3x`?~FKb)Cri5B)K=OqE!)@TYnsv_b zH9a(#<{wE+9{C=-X;{|rNi8j9O>~!*eQj`<$ZpoW8~0H6yRwK@qyjB6^d7gi({{Zb z%0D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 literal 0 HcmV?d00001 diff --git a/gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/index.md b/gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/index.md new file mode 100644 index 00000000000..0072d683862 --- /dev/null +++ b/gcp/appengine/blog/content/posts/introducing-broad-c-c++-support/index.md @@ -0,0 +1,94 @@ +--- +title: "Introducing broad C/C++ vulnerability management support" +date: 2023-10-31T01:00:00Z +draft: true +author: Andrew Pollock and Oliver Chang +--- +The OSV team is committed to bringing our users comprehensive, accurate and timely open source vulnerability information. Over the last year, the OSV team has released a number of new features in pursuit of this goal including: +- [OSV-Scanner’s call graph analysis for Go and Rust](https://google.github.io/osv-scanner/experimental/#scanning-with-call-analysis) +- [New ecosystems to the database](https://osv.dev/blog/posts/almalinux-and-rocky-linux-join-osv/) +- The [new determineversion API](https://osv.dev/blog/posts/using-the-determineversion-api/), which helps C/C++ developers match their dependencies to known vulnerabilities + +Today we are excited to announce the broad availability of vulnerable commit ranges into the OSV database. **Vulnerable commit ranges, along with the previously announced experimental determineversion API, will enable vulnerability management for software with C and C++ dependencies, which has been one of the last gaps in coverage in OSV.dev’s database.** + + +## What are vulnerable commit ranges?? + +![Image shows the vulnerable commit ranges for CVE-2023-26130. More information is available in the "Submoduled C/C++ dependencies" section.](commit-range.png "Vulnerable commit ranges for CVE-2023-26130") + +Typically open source dependencies are matched to known vulnerabilities by versions according to a package registry (e.g. npm, PyPI). Vulnerable commit ranges provide a granular approach that more closely follows the development process, matching vulnerabilities to a range of upstream commits. + +### Augmenting the NVD CVE database + +We've built up a database of 30,000 advisories based on the [NVD CVE database](https://nvd.nist.gov/vuln/search). We enrich the data from NVD with vulnerable commit ranges through algorithmic analysis performed by OSV.dev that matches git repository tag information to patch information supplied by the CVE. + +As part of our work in this area, we've established working relationships with the NVD via data quality fixes and longer term systematic improvements. + +### Advantages to OSV’s users + +The benefits of vulnerable commit range information include: + +- Identification of vulnerable C and C++ software +- Commit-level vulnerability scanning of source code (regardless of language) +- Easier identification of Git branches cut from known-vulnerable commits + +## Vulnerabilities in C/C++ dependencies + +Matching C/C++ dependencies to known vulnerabilities has been one of the final pieces in the puzzle of a truly comprehensive open source vulnerability database. Because the C/C++ ecosystem does not have a centralized package manager, source code identifiers (e.g. git hashes) are the best way to identify C/C++ libraries. Typically vulnerabilities are associated with versions, not git hashes, making C/C++ vulnerability matching difficult. The new commit level vulnerability information will allow users to confidently match their dependencies to known vulnerabilities within the OSV database. + +It is common for C/C++ projects to include their open source dependencies within their project and this is typically accomplished one of two ways: + +- Submoduled dependencies retain their git histories. It is easy to determine the current git commit of each dependency. +- Vendored dependencies are copied into the project but do not retain their git histories. It is difficult to determine the dependency version and therefore difficult to determine relevant vulnerabilities. + +Between our commit level vulnerability information and our previously released determineversion API, OSV is able to help you match your dependencies to vulnerabilities regardless of whether your project has submoduled or vendored dependencies. + +### Submoduled C/C++ dependencies + +Let’s take a look at the [pd-server](https://github.com/charlesneimog/pd-server) project. Pd-server is a PureData interface to cpp-httplib and includes cpp-httplib as a submoduled dependency. For this example, we will be working from `cf3f15a841ca21b53c6de654c9981a30ae0b590c`. If you want to follow along with this example, make sure that HEAD is pointed to this specific commit. + +To determine whether pd-server’s cpp-httplib copy has any known vulnerabilities, we must first determine the copy’s most recent commit hash by following these steps in your terminal: + +1. Recursively clone the pd-server project to your local machine using `git clone --recursive https://github.com/charlesneimog/pd-server` +2. Navigate into the pd-server project folder using `cd pd-server` +3. Use `git submodule status` to determine the most recent commits for each submodule. + +``` +git clone --recursive https://github.com/charlesneimog/pd-server +cd pd-server +git submodule status + 5c2e137f7a7a03f4007494954ccb3e23753e7807 pd-lib-builder (v0.6.0-28-g5c2e137) + 227d2c20509f85a394133e2be6d0b0fc1fda54b2 src/cpp-httplib (v0.11.3-6-g227d2c2) + 4c6cde72e533158e044252718c013a48bcff346c src/json (v3.11.2-39-g4c6cde72) + 1b11fd301531e6df35a6107c1e8665b1e77a2d8e src/websocketpp (0.8.2-1-g1b11fd3) +``` + +We can see that the cpp-httplib’s most recent commit hash is `227d2c20509f85a394133e2be6d0b0fc1fda54b2`. We can now use this information to construct an API call. It will be in this form: + +``` +curl -d \ + '{"commit": "227d2c20509f85a394133e2be6d0b0fc1fda54b2"}' \ + "https://api.osv.dev/v1/query" | jq '.vulns | map(.id)' +``` + + Which returns: + +``` +[ + "CVE-2023-26130" +] +``` + +From this result, we can conclude that the pd-server project is vulnerable to [CVE-2023-26130](https://osv.dev/vulnerability/CVE-2023-26130) through its use of cpp-httplib. Fortunately cpp-httplib has a fix. If pd-server updated their copy of cpp-httplib to [this commit](https://github.com/yhirose/cpp-httplib/commit/5b397d455d25a391ba346863830c1949627b4d08), the project would no longer be vulnerable to CVE-2023-26130. + +### Vendored C/C++ dependencies + +The determineversion API is the first step to finding vulnerabilities within your vendored dependencies. Vendored dependencies do not include git or version information, but the determineversion API estimates your dependency by comparing files hashes from your local project to known hashes for a given version. When we released the API in July, its use was limited to vulnerabilities found by OSS-Fuzz. Not all C/C++ projects are part of OSS-Fuzz, nor are all vulnerabilities for a given dependency found by OSS-Fuzz, so a number of vulnerabilities were left on the table. + +With the addition of the commit level vulnerability data from the NVD, this gap has been significantly narrowed. This means that the determineversion API may be used for the majority of vendored C/C++ dependencies. Once your dependency version is known, you can find the relevant vulnerabilities through searching our database or using our API. For more information on how to use the determineversion API, please see our [documentation](https://google.github.io/osv.dev/post-v1-determineversion/) or this [walkthrough](https://google.github.io/osv.dev/post-v1-determineversion/). + +Within the next few months, support will be added to OSV-Scanner to make this a seamless out of the box experience for developers. + +Try it yourself! + +Do you have a project that uses C/C++ dependencies? We encourage you to try our new vulnerable commit range features and [let us know](https://github.com/google/osv.dev/issues/new/) about your experience. If you encounter a data issue, please fill out a [data quality report](https://github.com/google/osv.dev/issues/new?assignees=&labels=data+quality&projects=&template=converted-nvd-cve-data-quality-report.md&title=Data+quality+issue+with+CVE-yyyy-nnnn). Your contributions, questions, and feedback will help us improve not only the quality of our data, but will ultimately help users identify and fix vulnerabilities in their projects. \ No newline at end of file