curlでAIツールによって見つかった潜在的な問題
(mastodon.social)- Joshua Rogers が自身の AIベースのツールセット を使い、curl のコードベースから大規模な潜在的問題の一覧を発見
- この一覧には、些細なコードスタイルの欠陥だけでなく、小さなバグや 潜在的なセキュリティ上の欠陥 も含まれる
- 見つかった問題の大半は 小さなバグ だが、1〜2件はセキュリティ面で致命的な欠陥である可能性がある
- これまで見つかっていなかった問題であり、実際に非常に価値のある結果
- 報告内容に基づき、22件のバグ修正がすでに完了 している状態
- なお、未確認の問題がまだその2倍以上残っており、引き続きレビューと修正が進められている
- 詳細な問題は "Reported in Joshua's sarif data" と記されており、関心があればそのデータを直接確認できる
1件のコメント
Hacker Newsのコメント
コードを直接書いたり直したりするのではなく、コード内の怪しい箇所や、自分がもっと詳しく確認すべき場所を教えてくれる役割を期待している
Claudeに自分の2万行あるCライブラリのバグを探してくれと頼むと、ファイルを分割して特定のコードパターンをgrepするようなやり方になり、結局は自分のFIXMEコメントを並べるだけになる(笑)
実際のところ単純なbashスクリプトでもできる程度で、かなりがっかりする
ChatGPTはそれ以上に役に立たず、ただ「全部よさそうです! すごいです! ハイタッチ〜」と繰り返すだけだ
これまで実際のバグを見つけるには従来の静的解析の方がはるかに役立ってきたが、静的解析がクリーンだからといって論理バグがないことを意味するわけではない
まさにこの点でLLMが真価を発揮すべきだと思う
もしLLMからより有用な潜在バグ情報を得るのに非常にカスタマイズされた環境が必要だとしたら、静的解析ツールも複雑な設定を求めると使われにくいのと同じで、結局は実用性が下がる
AIがコードを書き、プログラマーはレビューだけをするべきだという方向性は、どこかおかしい流れに思える
もちろん「コード行数が増えますよ〜」という売り方をしたい理由は理解できる
たとえば「Claude CodeにFIXMEやTODOのようなコメントを無視させて、論理バグを効果的にレビューする計画を立てさせるには、どんなプロンプトを書けばいいですか?」と尋ねる
得られるプロンプトは長いのでここには書けないが、gistで公開されている例で見られる
その結果をもとに改善を重ねて、エージェント化することもできる
無料トライアル後、うちの開発チーム内で評判がよかったので正式導入した
たまに誤検知はあるものの、非常に有用だ
PR作成者とレビュアーの両方にとって大きな時間節約になる
以前なら数時間かかっていたはずの問題を、手がかりを得て解決できたことがあった
こうした形でのAI活用には大きな期待を持っている
「全部よさそうです」のような返答が出たというのは少し意外だった
Codex CLIで使うと、しばしば疑問を投げかけてくれる
Gemini 2.5 Proもこの点では悪くない
経緯を知るには curl+AI関連のHN検索リンク を見るとよさそう
結局のところ、きちんと理解して使う人と、単に雰囲気でコーディングする人の違いに帰着するという見方が正しい気がする
Daniel Stenbergが過去にAI製の雑な誤ったセキュリティ問題報告に悩まされていたこととは対照的だ
HackerOne関連では、「AIが作ったゴミみたいな問題報告をする人は即バンにする。実質DDoS攻撃レベルだ。時間の浪費について請求したいくらいだ」と述べていた
今年1月のDanielのブログ記事も参照: The I in LLM stands for Intelligence?
「重要なコンパイラ警告フラグが不足しています」とAIが助言してくれるのはかなり有用だろう
一部のPRはdependabotとの一致によるもののようで、「Joshua sarif data」で検索すれば、より具体的なPR一覧が見られる リンク
Daniel Stenbergの印象が変わった理由もそこにあるのではないかと思う
AIベースのSAST技術を導入しようという主張は多く、実際に関連製品も出ているが、ほとんどはまだ期待外れだ
がっかりするだけならまだいいが、悪い場合には誤ったセキュリティへの信頼を生み、危険でもある
AIベースSASTスキャナーに対する批判的な見方とその根拠は ここで紹介されている
既存のさまざまなツールがバグを見つけられなかった中で、今回の戦略がなぜより効果的だったのか気になる
Mastodonのリンクは、誤ったコードスニペットがあっても実際にバグであることを確認するためのものだと推測する