Google Code Search
ちゃんとプログラムソースにも著作権がある。
だから気軽にパクっちゃいけないよ!という前置きをして以下。
http://www.google.com/codesearch
公開されているソースコードを検索してくれるサービス。これは画期的だ!
何が画期的って、脆弱なソースコードを見つけたときに、同じように脆弱なアプリケーションはありゃしないかえ?という検索ができるのだ。
ずいぶん昔の話になるけれど、wu-ftpd に off-by-one と言われるタイプの脆弱性(桁を間違えて処理したのでバッファが溢れる)が見つかった時、realpath.c というソースコードにそのバグは潜んでいたのだけれど、このファイルはBSD由来のソースコード。そこから派生したアプリケーションの数々へ与える影響は計り知れないものとなり…(以下略)。
libcすら脆弱、なんてことがあったアレは、単一のソースコードによる脆弱性としては知る限り最も影響が広範囲だったものの一つだ。
というわけで、さっそく Google codesearch にかけてみる。カッコは抜かないと検索できないようなので、「strlen resolved strlen wbuf rootd 1 MAXPATHLEN」で検索。
出るは出るは、BSD由来のrealpath.cの山!OpenSSHもさすがBSD由来、3.6ぐらいまでは同じ脆弱性を持っていたようだ。
ちなみに、FreeBSDが件の脆弱性を修正するために提供したパッチが以下。libcのような超コアなライブラリに見つかった脆弱性はたったこれだけの差にあったのだ。
Index: lib/libc/stdlib/realpath.c =================================================================== RCS file: /home/ncvs/src/lib/libc/stdlib/realpath.c,v retrieving revision 1.9 diff -c -c -r1.9 realpath.c *** lib/libc/stdlib/realpath.c 27 Jan 2000 23:06:50 -0000 1.9 --- lib/libc/stdlib/realpath.c 3 Aug 2003 17:21:20 -0000 *************** *** 138,144 **** rootd = 0; if (*wbuf) { ! if (strlen(resolved) + strlen(wbuf) + rootd + 1 > MAXPATHLEN) { errno = ENAMETOOLONG; goto err1; } --- 138,145 ---- rootd = 0; if (*wbuf) { ! if (strlen(resolved) + strlen(wbuf) + (1-rootd) + 1 > ! MAXPATHLEN) { errno = ENAMETOOLONG; goto err1; }
例として挙げるには恣意的なものだったけど、こういう探し方が出来る Google Code Search ったら面白すぎですね。