世界を動かす技術を、日本語で。

cURLがバグ報奨金を廃止

概要

  • cURL がバグ報告に対する報奨金制度を廃止
  • AI生成の無意味なバグ報告 が急増し、管理者の負担増加
  • 報奨金廃止で 不要な報告の抑制 を期待
  • 一部の 良質なAI支援報告 も存在
  • Joshua Rogers も廃止に賛成、動機は「名声」が主

cURL、AI生成バグ報告増加による報奨金制度廃止

  • cURL は、オープンソースのコードライブラリ
  • AIによる誤ったバグ報告 が大量に寄せられ、管理者の作業負担が深刻化
  • 報奨金制度が AIスロップ(無意味な報告) の動機となっていた現状
  • 管理者の Daniel Stenberg による「Death by a thousand slops」という表現で問題提起
  • 2024年1月末で 報奨金支払いを終了 する決定
  • 報奨金廃止は「 ゴミ報告のインセンティブ除去」が狙い
  • 本物の脆弱性発見 には今後も名声や達成感が動機として残る

AI生成バグ報告の現状と課題

  • AI生成バグ報告の大半は無意味 で、確認作業に多大な時間が必要
  • 一方で、 AI支援による有益な報告 も100件以上存在
    • 過去の報奨金総額 は87件で約101,020ドルに到達
  • 報奨金がなければ見逃されたバグ報告 もあった可能性
  • 他のオープンソースプロジェクト でも同様の問題が発生中

Joshua Rogersの見解と報奨金の意義

  • Joshua Rogers は著名なバグハンター
    • AIツールを活用しつつも 自ら確認・補足 して報告
  • 報奨金廃止を支持 し、「もっと早くやるべきだった」と発言
  • 名声こそが最大の報酬」という認識
    • cURLの最大報奨金1万ドルは、重大な脆弱性発見者にとっては小額
  • 経済状況による価値観の違い も指摘
    • 低所得地域では小額報奨金でも大きな動機となりうる
  • 開発者とセキュリティ研究者の非対称性 を問題視

今後のオープンソースプロジェクトへの示唆

  • 報奨金制度の見直し が他プロジェクトにも波及する可能性
  • AI生成報告の質向上 や新たな動機付けの模索が課題
  • コミュニティの健全な維持 と作業負担のバランス調整

Hackerたちの意見

興味がある人のために、スロップのリストを載せておくね: https://gist.github.com/bagder/07f7581f6e3d78ef37dfbfc81fd1d...

問題を再現するために、この脆弱性についてBardで調べてみた。BardがLLMとして言及されてるのを見ると、なんだか懐かしい気分になるね :)

2つのレポートを見たけど、それがAIから直接出ているのか、セキュリティをよく理解していない非常に若い学生からのものなのか判断できなかった。LLMは一般的にもっと説得力があると思う。

二つ目の報告で、ダニエルはスロッパーにすごく優しく挨拶して、会話を始めようとしたんだけど、スロッパーは全然違う名前で呼んできたんだ。しかもそれが2023年12月の話。めっちゃ疲れたに違いない。

正直、読んでてムカつく。cURLがこんなに長い間我慢してたなんて、驚きだわ。

その報告は明らかにAI生成だし、スタッフがそれを認識してないのが不思議で真剣に取り合ってるのが変だ。

バグが重要だと判明した場合に返金されるエントリー料金があれば、すぐに解決すると思う。でも、以前に銀行にバグ報告をしたことがあって、ログイン方法がパスワード+PINからPINのみに切り替えられることができるのに、彼らは「意図通りに動作している」として閉じられたんだ。オプションのパスワードの方が必須のパスワードより便利だと決めたみたいで。(それに、実際の二要素認証と、パスワードログインにPINを追加しただけの中途半端なものとの違いについては触れてないけど。)病院や銀行のような厳しく規制されているものは、実際のセキュリティではなく、コンプライアンスに合わせたセキュリティ手順があることを学んだよ。バグバウンティプログラムのホストが善意で運営していると仮定すると、エントリーの障壁や未検証のエントリーへの罰則を設けることで、悪意のある提出者を排除できると思う。

同意するけど、返金は合理的な人がそれを脆弱性と考えられるかどうかに基づくべきだね。外部の人には、ある行動が期待されるものなのか脆弱性なのかを判断するのは難しいことが多い。

バグが重要だと判明した場合に返金されるエントリー料金があれば、すぐに解決すると思う。これをNotionからConfluenceへのコスト境界と呼んでいる。Notionが最初に出たときは、サクサク動いて使いやすかった。ページを作成するのがほぼ手間いらずだったから、すぐに何千ものページができてしまったけど、ほとんどが無駄だった。Confluenceは、西欧では攻撃的に遅い。ページを追加することを考えるだけで気が滅入るから、既存のページを更新してリクエストタイムアウトの時間を節約する方が楽なんだ。結果的に、大企業でも約20ページしかない。sleep(15 * SECOND)が対策になるとは言わないけど、何かがスケールで非常に簡単にできるようになると、元の有用性がノイズの海に埋もれてしまうんだよね。

そのエピソードは面白いし、同時に怖い。オプションのパスワードは必須のより便利だけど、オプションのPINもそうだよね。一番便利なUXは、全くログインしなくてもいいことだ!もちろん、他の人が自分の銀行口座にアクセスできるのは不便だと思うけど。

バグバウンティは、提出者にとってリスクが大きいことが多い。報告を読む人があまり詳しくなくて、誤解することもよくあるし、どんな報告が求められているのかルールが不明瞭なことも多い。参加費を取ると、そのリスクが増える。正直、バグバウンティは両方にとってちょっと悲惨だよ。バグバウンティプログラムの受け取る側で働いたことがあるけど、提出されるものは信じられないくらいひどい。AIが登場する前でも、整理するのは大変だったから、今はどんな感じか想像もつかない。提出者にとっては、評価が公平に行われる保証がないまま、実質的にスペックで働いているようなもんだよね。たとえ評価されても、10年前に報告された問題の重複じゃないかという賭けをしてるわけだし、その会社が直す気がないだけなんだ。

cURLはそのプログラムを誠実に運営して、cURLが重視するバグ報告を提出する人たちの信頼をすぐに得るだろう。でも、君の銀行はそうじゃないし、私の銀行も、ほとんどの小売銀行もそうじゃない。もし初期コストが本当に潜在的な提出者を遠ざけるなら、ハッカーたちが君にお金を前払いして、バグが良さそうならその分の取り分を求めるような小規模な産業が生まれるだろう。それが気持ち悪いと思うかもしれないけど、実際はそうじゃない。彼らはプロジェクトのバグトリアージをやってくれるから、どんなソフトウェア会社も人にお金を払うことを喜ぶはずだよ。

最近知ったんだけど、病院や銀行のような厳しく規制されたものは、実際のセキュリティじゃなくてコンプライアンスに合わせたセキュリティ手順を持っている。悲しいことに、そうだね。捕まるかもしれないと思わない限り、何もやらない。最近まで顧客だったEU全域の銀行は、認定電子署名でのログインをサポートしてたけど、君のドングルが…SHA-1をサポートしている場合だけ。私のはサポートしてなかった。もう10年以上前に廃止されたものだよ。政府認定のアイデンティティプロバイダーが、複数の電子署名をリストで表示できるソフトウェアを作ったけど、その中にYubiKeyがあると…クラッシュ。YubiKeyは彼らが売っていたPIVモジュールと同じ標準に準拠しているのに、開発者が標準を超えた仮定をしてしまった。私はただ、YubiKeyを接続している間にソフトウェアがクラッシュしないことを望んでいただけなのに。報告したら、彼らは「それは私たちの問題じゃない」と返事してきた。

弱い銀行のログインについてだけど、アカウントの乗っ取りをすべて補償する方が、非技術的な顧客を遠ざける複雑なログインプロセスを持つよりも安上がりだと思う。まあ、もし私がコンピュータサイエンスよりも金融に詳しかったら、アカウントの乗っ取りがどれくらい起こるかを示す合理的なリスク評価があれば、その決定を下すかもしれないね。

それ以来、病院や銀行のような厳しく規制されたものは、実際のセキュリティではなく、コンプライアンスに合わせたセキュリティ手順があることを学びました。私は、デバイス認証に関するGrapheneOSの状況のおかげでその結論に至りました。認証されているために、不安定なデバイスでもいくつかのアプリからフル機能を受けられる一方で、GrapheneOSは「不安定」と見なされているため、機能が半分しかないアプリしか使えません(要するに、Googleの認証がないけど、実際には世界で最も安全なデバイスなんです)。

バグレポートは100%確実な白黒のものなの? バグを見つけたと思ってるけど、確信が持てない人は、間違ってるかもしれないリスクやコストで萎縮しちゃうことはないかな?

このアプローチの問題点は、バグバウンティプログラムの重要な機能の一つが、脆弱性を他で売るんじゃなくて開発者に報告するように人を促すことなんだよね。もし、開発者に脆弱性を報告するのにお金を払わなきゃいけなくて、しかも高品質で誠実な報告をしても返金される保証すらないなら、他の誰かに売る方がずっとインセンティブがあるよね。

オープンソースはAIから一番損をしているみたいだね。オープンソースコードがモデルを訓練して、そのモデルがインセンティブがあるところでオープンソースプロジェクトをスパムするために使われている。さらに、有料機能を実装したりサポートを提供することで、オープンソースのビジネスモデルを侵食することもできるし、最終的にはAIがほとんどのオープンソースコードを置き換えるかもしれない。

オープンソースコードがモデルを訓練しただけとは言えないと思うよ。CSのコースや教科書、公式ドキュメント、講演やコースのトランスクリプトも影響しているしね。AIがほとんどのオープンソースコードを置き換えるという点については、何のツールだったか忘れたけど、古いAndroidデバイスにアクセスするための非常にニッチな方法が必要だったんだ。それはルート化されていたけど、Disk Drillみたいなものを使うと最終的に空のファイルが出てきてしまった。だから、誰かが作ったGUIを見つけて、Claudeに必要な機能を追加してもらうよう頼んだんだ。a) 見えているディレクトリをプレビューできるようにして、b) sudoを使えるようにして、合理的な遅延(1秒くらいだったと思う)でダウンロードできるようにしてもらった。それがうまくいったから、もう問題はなかったよ。古い写真を復元するのは少し遅かったけど、まあいいや。コードの変更をGitHubに戻そうか迷ったけど、期待通りに動作するけど、メンテナの目標からはずれてしまったと思う。

「オープンソース」と「ビジネスモデル」を同じ文で使うなんて…次はフォークでプリンを食べろって言うのか?

オープンソースのビジネスモデルに対して、有料機能を実装したりサポートを提供することで、徐々に侵食していくことができる。AIについて悲しいことはたくさんあるけど、これはその一つじゃない。ビジネスモデルに対する権利なんて誰にもないし、特に誰も競争しない前提のものなんて。もし君のビジネスモデルが、他の世界がダメだからこそオープンコアソフトウェアに付加価値を売ることに依存しているなら、失敗するのを見て嬉しいよ。

AIがインターネットを劣化させる影響は、ソーシャルメディアと同じだと思う。無駄なPRや問題の洪水はその一つの症状だね。もう一つは、AIがTikTokが始めたトレンドを加速させていること—短くて浅い、手間のかからないコンテンツ。すごく残念だけど、この技術は素晴らしいのにね。でも、どのテック企業も「AIが未来だ」っていうクーラーディを飲み干してしまったから、低品質でAI生成のゴミが溢れるのに対抗するインセンティブが誰にもない。しばらくは底辺争いになるだろうね。

同じ流れで言うと、Google Summer of Code(GSoC)のようなプログラムは大規模な見直しが必要になるか、運営をやめることになると思う。私の失敗した試みから覚えているのは、- 学生は自分の興味やスキルに合ったプロジェクトを見つけて、早めに貢献を始めなきゃいけなかった。 - 複雑さのために応募する学生が少ないプロジェクトには近づかない方がいいって話してた。これらの要素がプロジェクトのクリエイティブなフィルターになって、良い学生や貢献者を引き寄せてたけど、AIがそれをスケールでできるようになると、全部なくなっちゃうね。

どういうこと?バザールモデルが最も利益を得られると思う - 貢献者はLLMを使ってPRを作成できるし、どれだけ「バイブコーディング」を信頼するかによって、さまざまなプロジェクトから選べるよ。

スロップの提出物を一つ読んでみたけど、誰が真顔でこんなの提出できるのか理解不能だわ。 https://hackerone.com/reports/3293884 期待される動作も理解してないし、何が引っかかるか試すために無駄にスロップを投げつけるのが、生成AIの問題なんだよね。

彼らは気にしないよ。大量に作って、スパムのようにばら撒いて、少しでも成功することを期待してる。もしアカウントが禁止されたりブロックされたら、新しいアカウントを作る。恥なんて全く関係ない。お金が全て。商品について理解しようとも思わないし、興味もない。以前からそういうことはあったけど、今はLLMのおかげで、無関係な人たちが試してみて、さらに混乱を招いてるんだろうね。

働いてる会社のバウンティ制度はかなりひどい(基本的にsecurity@corpのメール)。デモシステムとドキュメント付きの公開APIがあるんだけど、今は1日100通以上のメールが来る。ほとんどがスロップや詐欺、最近のお気に入りのAIセキュリティ会社からの、無提示で送られてくるAI生成のペンテストが含まれてて、偽陽性や嘘がいっぱい。完全に役に立たなくなって、誰も見なくなった。営業の人が電話してきて、無提示でAIの結果をレビューするために3時間のセッションを予約しようとしてきたこともあった。250ページ近いレポートを見たら、Windowsサーバー用の重大なIISバグ(存在しない)を、スキャンしたIPアドレス5xx.x.x.x(そう、ありえないIP)で見つけて、AWSに公開されてるって言われたから、思わず選ばれた言葉を言っちゃったよ。

直接的な金銭的利益、例えば報酬のようなものを除けば、大きなプロジェクトへの貢献を示したり、CVEを取得するために目立とうとする努力がある。ステンバーグは、彼らのブログで何度か無効または過大評価された脆弱性について書いていて、それらは人間によって作られたものだ。これらの中には、単に誤解された報告者ではなく、名声のために大げさにする意図的な試みがあるように感じることが多い。こういうことはインセンティブとして計上するのが難しいように思える。

なるほどね。このバグを探すプロセスは遅くて時間がかかるから、インセンティブが必要だった。でも、今はそうじゃない。今の難しい部分は、どれが本物かを特定することだ。名言を言い換えると、AIを搭載したバグハンターは、3つの深刻な脆弱性のうち100を見つける。

今のところ、どれが本物かを見極めるのが難しい。だから、まだまだ時間がかかるプロセスなんだ。

バグを見つけるプロセスは、まだまだ時間がかかるし遅い。cURLのようなコードベースで見つかる脆弱性は、まだAIの範囲外だよ。バイナリエクスプロイトは、今でも人間だけの分野なんだ。

今やこういうAIのゴミに敏感になってるのが面白いね。最初は記事の冒頭のエンダッシュにこだわって、記事の著者を数秒間疑ってしまった。

これに対する解決策は、私の意見ではフラグだね。CTFのように、自分のソフトウェアのインスタンスをホストして、成功したエクスプロイトの後にしか取得できないフラグを設定する。誰かがそのフラグを提出したら、彼らが有効な脆弱性を見つけたかどうかについて議論する余地はない。確かに、これはすべての脆弱性クラスに当てはまるわけではないけど、私の考えではベストな妥協案だよ。

それって具体的にどういうこと?Curlって、どこかに「ホスト」できるソフトウェアじゃないし、ソフトの中にフラグを隠す場所も分からないんだけど。実際にフラグを取得できる脆弱性は少ないか、もしくはエクスプロイトなしで簡単にフラグを取得できちゃうってことになるよね。

このフラストレーションの原因になったと思われるいくつかの宝石を紹介する動画: https://youtu.be/8w6r4MKSe4I?si=7nfRd0VmX8tvXAnY