AIToday
AIコーディングAI安全性・アラインメントZenn AI/ML掲載日時: 2026年10月10日 10:00

AIが書いたNext.jsのコード、攻撃12件全て成功

LINEで送る
AIが書いたNext.jsのコード、攻撃12件全て成功

Next.js 15.5.2 App Router製ブログアプリ(TypeScript、17件、352行)で、攻撃テスト12件(A01~A12)が修正前は全て成功、修正後は全て遮断。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

テストアプリは意図的に小規模で、Next.js 15.5.2のApp Router、React 19.1、TypeScript、node:sqliteによるSQLite、Node.js 22.22.0を使い、ソースファイル17件で352行。修正前は攻撃テスト12件がすべて成功し、修正後は12件すべてが遮断された。テストはローカルコピーとダミーデータに対してのみ行い、著者は稼働中のサーバーで試さないよう警告している。

いくつもの穴は特定の手抜きに起因する。プロフィール更新フォームが対象者のuserIdをhiddenフィールドで送っていたため、それを書き換えてrole=adminを追加すると、ログイン済みのBobがAliceの名前を変更し管理者に昇格できた。修正では対象をセッションから読み取り、名前だけを受け付ける。ルートハンドラには認証も所有権確認も一切なく、他人の投稿の削除やログインなしでの下書き閲覧がともに可能で、users APIは平文パスワードを含むSELECT *の出力を返していた。パスワードの修正ではソルト付きscryptを設定N=2^15、r=8、p=3で使い、OWASPはN=2^17、r=8、p=1の最小値と並べて1回の計算あたり約32MiBを使うものとしている。

他の欠陥は制限されていなかった点に関するものだった。検索ボックスとIDパラメータでSQLがクエリに埋め込まれ、画像プロキシは渡された任意のURLを取得し(SSRF)、著者はRailwayの*.railway.internalのようなプライベートネットワークへの懸念と結びつける。アップロードはクライアント提供のファイル名を使ったため、../../pwned.htmlがpublic/uploadsの外に書き込まれた。CORSはリクエストのOriginを資格情報許可付きで反射し、ログイン後のリダイレクトは外部サイトへの絶対URLをたどり、セッションCookieにはHttpOnly、Secure、SameSiteがなく、有効期限は1年でトークンはMath.random()で生成されていた。バージョン固定も重要で、著者はAIが学習したバージョンを書きがちで後のパッチを逃すと指摘する。アプリ固有のSemgrepルールを12件書いたところ、修正前に17件の一致が現れ、修正後は0件になった。ただし著者は、これと公開ルールの検出0件はルールが一致しなかったことのみを意味し、コードが安全だという意味ではないと注意を促している。

よくある質問
公開Semgrepルールセットはこれらの穴を検出したか?
いいえ。未修正のコードでもp/typescript(74ルール)、p/react(4)、p/owasp-top-ten(80)、p/secrets(41)はいずれも検出0件だった。著者は、多くの穴が見慣れないコードではなく確認漏れによるものだと指摘する。
このプロジェクトでnpm auditは何を検出したか?
npm audit --omit=devはnextに重大な勧告を検出した。React Server Componentsの通信処理におけるリモートコード実行(GHSA-9qr9-h5gf-34mp)を含み、nextに対する勧告は合計33件。15.5.27へのアップグレードで件数は3件(重大1、高2)から2件(高1、中1)に減り、postcssとそれが依存するnextが残った。
秘密のAPIキーはNEXT_PUBLIC_ではなくどこに置くべきか?
サーバー専用のLLM_API_KEYを使い、サーバールート(POST /api/posts/[id]/summary)からAI APIを呼び出し、ブラウザはそのルートを呼ぶようにする。ダミーのsk-demo-LEAK-CHECK-123のようなNEXT_PUBLIC_キーはビルド時にブラウザのJavaScriptに埋め込まれ、誰でも読めてしまう。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

OpenAI、安全性研究者3人を解雇

Mikita Balesni、Jasmine Wang、Tomek Korbakは10月8日、前週に解雇され書面での理由提示がなかったと述べた

NEWITmedia AI+1時間前

AI進歩はエンジニアリングとインフラで加速

Nathan Lambert氏がエッセイを公開し、AIの進歩はエンジニアリングとインフラの向上で加速すると主張

NEWInterconnects (Nathan Lambert)1時間前

台帳を汚さぬ試し打ち機能を新設、大型株は38%で却下

9月22日、チャート画面から任意の銘柄を試せる「試し打ち(sandbox)」機能を新設し、大型株を実機検証したところ確度38%で却下、予測台帳は76件のまま維持された

NEWQiita 機械学習1時間前

漏洩対応はまず範囲の特定から

臨床工学技士でAIエンジニアの遠藤太一氏がZennで、漏洩対応の第一歩は範囲の定義だと述べ、AnthropicのClaude Codeソース漏洩に関する公式声明を引用した

NEWZenn AI/ML1時間前

Claudeに3問2度反論、6回とも正解を訂正せず

AIレシピニュースレターの編集チームがClaudeに鉄と羽毛の重さ比べ、モンティ・ホール問題、誕生日のパラドックスの3つを出し、それぞれ2度ずつ反論した

NEWZenn AI/ML1時間前

仕様をまとめてAIに任せPRをマージする開発

Zennの記事が、ざっくりした仕様をCompanyBrainに書き、目標をOpenAIの常駐エージェントdotsに任せ、上がってきたプルリクエストを確認してマージするだけのワークフローを紹介している

NEWZenn AI/ML1時間前
次の記事へUkraine