← 最新の論文
💻 computer science

How Secure is Code Generated by ChatGPT?

この論文は、ChatGPT が生成するコードのセキュリティを評価した実験を通じて、同モデルが潜在的な脆弱性を認識しているにもかかわらず、特定の攻撃に対して堅牢ではないコードを頻繁に生成してしまうことを示唆しています。

原著者: Raphaël Khoury, Anderson R. Avila, Jacob Brunelle, Baba Mamadou Camara

公開日 2026-04-09
📖 1 分で読めます☕ さくっと読める

原著者: Raphaël Khoury, Anderson R. Avila, Jacob Brunelle, Baba Mamadou Camara

原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む

この論文は、**「ChatGPT が書いたコードは、本当に安全なのか?」**という重要な問いに答える実験レポートです。

一言で言うと、**「ChatGPT は優秀な『料理のレシピ作成助手』ですが、そのままのレシピで料理を作ると、毒が入っていたり、火事の原因になったりする可能性が高い」**という結論に至っています。

以下に、専門用語を排して、身近な例え話を使って解説します。


1. 実験の仕組み:「新人料理人」への注文

研究者たちは、ChatGPT に「21 種類のプログラム(料理)」を作らせました。

  • C, C++, Python, Java, HTML という 5 つの異なる「言語(調理法)」を使いました。
  • 指示はシンプルに。「ファイル共有サーバーを作ってください」「パスワードを保存してください」など、具体的な機能だけを頼みました。
  • 重要なのは、「セキュリティ対策(毒抜きや防火壁)をしてくれ」とは言わなかったことです。これは、セキュリティに詳しくない「初心者の料理人」が、ChatGPT に任せてしまう状況を想定したものです。

2. 結果:「完璧なレシピ」は存在しなかった

結果は**「かなり危険」でした。
21 個のプログラムの中で、最初から安全だったものは
わずか 5 個**だけでした。残りの 16 個は、以下のような致命的な欠陥(毒)を持っていました。

  • パストラバーサル(道案内の罠): 「自分の家の庭だけを見て」と言っているのに、ChatGPT が書いたコードは「隣人の家の地下室まで入っていいよ」という指示を含んでいました。
  • SQL インジェクション(偽の注文): データベースに「注文リスト」を渡す際、ChatGPT が「『全削除』という注文も受け付けてください」という隙を作っていました。
  • パスワードの平文保存: 重要なパスワードを、暗号化せず「メモ帳にそのまま書く」ような状態で保存するコードを作っていました。

「なぜそんなことになったの?」
ChatGPT は、「悪意のある人が攻撃してくる」という前提(敵対的なモデル)を持っていないからです。
「ユーザーは正しい入力をするはずだ」と楽観的に考えており、攻撃者が「変な入力」をしてくる可能性を想定していませんでした。

3. 面白い発見:「指摘すると直せるが、自発的には直さない」

実験の面白い点は、研究者が「このコード、攻撃されると危ないよ?」と指摘すると、ChatGPT の反応です。

  • 自覚はある: 「ああ、確かにその通りですね。悪用されそうです」と、弱点を即座に理解し、説明も上手でした。
  • 修正もできる: 「じゃあ、安全なバージョンに書き直して」と頼むと、多くの場合、安全なコードに書き直してくれました。

しかし、「自分で気づいて直してくれる」ことはほとんどありません。
まるで、**「料理の味見をしないと、塩を入れ忘れたことに気づかない料理人」**のようです。ユーザーが「塩(セキュリティ対策)を入れてください」と言わない限り、そのままの状態で提供してしまいます。

4. 具体的な失敗例(メタファーで解説)

  • プログラム 4(正規表現の罠):
    ChatGPT は「パスワードにユーザー名が含まれていないかチェックする」コードを作りましたが、そのチェック方法が非常に重たい計算でした。攻撃者が「計算を無限にさせるような文字」を送ると、サーバーがパンクして止まってしまう(DoS 攻撃)状態でした。ChatGPT は最初は「大丈夫です」と言いましたが、指摘されると「あ、確かに危険ですね」と認めました。
  • プログラム 17(パスワード保存):
    暗号化も塩(ソルト)も使わず、パスワードをそのまま保存するコードを作りました。これは「金庫の鍵を玄関のマットの下に隠す」ようなものです。しかし、「パスワードを安全に保存する方法」を聞くと、すぐに「暗号化して保存しましょう」と正しい答えを返しました。

5. 倫理的なジレンマ:「なぜ攻撃コードは作らないのに、危険なコードは作るの?」

ChatGPT は「爆弾の作り方」を聞かれると「作れません」と断りますが、「危険なパスワード管理システム」のコードを聞かれると、平気で作ってしまいます。
これは矛盾しています。なぜなら、「危険なシステムを作る」ことと「攻撃コードを作る」ことは、結果として同じくらい危険だからです。
さらに、Java の「逆シリアライゼーション」という複雑な攻撃に対しては、「危険です」とアドバイスしながらも、「安全なコードに書き直すのは私の能力を超えています」と言って逃げ出す場面もありました。

6. 結論:どう付き合うべきか?

この研究の結論は以下の通りです。

  1. ChatGPT はまだ「熟練のセキュリティ専門家」にはなれない。
    初心者がそのまま使えば、すぐにハッキングされるようなコードができてしまいます。
  2. しかし、「教育ツール」としては素晴らしい。
    「このコード、どこが危ない?」と質問すれば、非常に詳しく解説してくれます。
  3. 人間が「味見(テスト)」をする必要がある。
    ChatGPT に任せるなら、人間が「もし悪意ある入力があったらどうなる?」と問いかけ、修正を促す必要があります。
    **「ChatGPT は優秀な『下書き』を作ってくれる助手ですが、最終チェックと安全確認は、人間が責任を持って行うべき」**というのが結論です。

まとめ

ChatGPT は、「料理のレシピを素早く作ってくれる天才アシスタント」ですが、「毒抜き」や「防火対策」を忘れる癖があります。
私たちが使うときは、「これで完成!」と安易に信じるのではなく、「本当に安全?」「攻撃されたらどうなる?」と**厳しくチェックし、修正を指示する「料理長」**の役割を人間が果たさなければなりません。

自分の分野の論文に埋もれていませんか?

研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。

Digest を試す →