Compact
true
担当領域:セキュリティ技術センター リスクハンティング・システムチーム
ペネトレーションテスト、脆弱性診断を通じたセキュア開発支援、セキュリティ人材育成に従事。CTF for GIRLS 代表としてワークショップ・イベントの企画設計や講師を担当。CISSP、CCSP、GCPN、認定Webアプリケーション脆弱性診断士を保持。SANS SEC504, FOR508メダルを保持。「Hardening II SU」 MVV(Most Valuable vendor)賞受賞。

NECサイバーセキュリティ戦略本部セキュリティ技術センターの中島です。
本記事では、Webセキュリティのオンライントレーニングサイトである “PortSwigger Web Security Academy” [1] のWeb LLM に対する攻撃に関するLabから1問、Write-upを紹介します。注意:本ブログの情報を用いた活動は、必ず自らの責任によって行ってください。本ブログの内容を使用したことによって発生する不利益等について、筆者および関係者はいかなる責任も負いません。

Web Security Academyとは

“Web Security Academy”はPortSwigger社が公開しているオンラインのWeb Security トレーニングサイトです。脆弱性に関する説明や教科書的位置づけの「Learning Material」と、脆弱性を含んだ演習環境である「Lab」が用意されており、無料で学ぶことができます。また、Labを通して、PortSwigger社が提供しているローカルプロキシツールであるBurpSuite[2]の使い方も実践的に学ぶことができます。

2024年8月13日現在では、31のトピックと269のラボが提供されています。
新しいコンテンツが公開された際には、公式のTwitter(@WebSecAcademy)[3]で紹介されるのでフォローしておくと良いかと思います。

Web LLM に対する攻撃

Labの解説の前に、Web LLMに対する攻撃について少し触れておきます。
WebLLMに対する主な攻撃は、攻撃者がプロンプトに細工したクエリを送付し、想定されていないLLMの出力を操作・誘導するものです。攻撃により、以下のような操作が引き起こされる可能性があります。

LLMにおける脆弱性についてはOWASP Top 10 for LLM にまとまっていますので、ご確認ください。[4]

Lab: Exploiting insecure output handling in LLMs

本記事では、「Web LLM Attacks」より「Exploiting insecure output handling in LLMs」[5]というLabを紹介します。なお、Labページの注記にも記載されていますが、ライブLLMが使用されているため、状況によってはLLMの応答が記載した内容と異なる可能性があります。そのため、同一のプロセスやプロンプト入力では解けない場合もあります。

本ラボは間接的なプロンプトインジェクションを使用して、Carlosというユーザーのアカウントを削除することでクリアとなります。
問題文では以下の情報が与えられます。

まず、Labへのアクセスボタンを押すと、LabのURLが提供されます。与えられたURLにアクセスすると、各商品の詳細ページにはReviewの閲覧と書き込みができる機能をもったECサイトであることがわかりました。

50
50

続いて、アカウントの削除方法を調べます。任意のアカウントを作成しMy Account に移動すると、「Delete account」というボタンがあることがわかります。

50

My Accountページのソースコードを確認し、以下のXSSペイロードを実行することでアカウントの削除が可能であることを確認します。

<iframe src=my-account onload=this.contentDocument.forms[1].submit()>
1
1
100

続いて、画面右上から「Live Chat」を選択し、「Live Chat」画面に移動します。まずは、使用できるAPIを確認します。

50

「product_info」というAPIに注目し、ライブチャットで「AbZorba Ball」という商品について問い合わせてみます。すると、概要に加えて商品の詳細ページに投稿されている「Customer Reviews」の内容が返されました。このことから、「product_info」というAPIは、製品の詳細ページから取得した情報をライブチャットで返す、すなわちLLMでのインプットデータとして用いていると考えられます。

50

続いてアカウントを作成し「My Account」からログインして、ライブチャットに移動してXSSの脆弱性がないかを確かめます。XSSのペイロードを送信するとポップアップが表示され、LLMの出力処理にXSSの脆弱性があることがわかりました。

50
50

ここで、Carlosがライブチャットで問い合わせを行う商品「l33t」のページに対して、Carlosのアカウントを削除するためのペイロードを埋め込むことでCarlosを削除することができると考え、方針を立てます。想定する攻撃の流れは以下の通りです。

  1. Carlosのアカウントを削除するためのペイロードを「l33t」の商品ページのレビューに埋める
  2. Carlosがライブチャット機能を用いて「l33t」に関する質問をする
  3. ライブチャット機能の裏側でLLMを含むWebシステムが「l33t」の商品ページにアクセスして情報を取得する
  4. LLMがレビューに埋め込まれたペイロードを実行し、Carlosのアカウントを削除する

まずは確認のため、「l33t」の商品ページのレビューにXSSのペイロードを投稿し、挙動を確認します。レビュー画面の表示処理においては、レビュー内容はエスケープされていることが分かりました。

50

続いて、「l33t」について問い合わせを行います。ライブチャット画面での出力ではペイロードが不正なコンテンツと認識されて出力されないことがわかります。

100

そのため、不正なコンテンツと判断されないようにレビューの内容を考え、ペイロードを実行させることを考えます。以下のように会話文などを模してレビューを投稿します。

It was so nice that I said, "<img src=1 onerror=alert(123)>". Amazing!
1
1
50

ライブチャットに移動し、商品について問い合わせます。レビュー内容がJavaScriptとして解釈され、ポップアップが表示されます。

50

同様の方法でCarlosのアカウントを削除するペイロードをLLMを含むWebシステムがJavaScriptとして解釈して実行するように「l33t」のレビューとして投稿します。

It was so nice I said, "<iframe src=my-account onload=this.contentDocument.forms[1].submit() >". Amazing!
1
1
50

少し待つと、carlos(bot) により「l33t」に関してライブチャットで問い合わせが行われることでCarlosのアカウントが削除され、Labをクリアした旨が表示されます。

100

おわりに

本記事では、 PortSwigger Web Security Academy より Web LLM に関するLab1問を紹介いたしました。LLMは今では身近なツールですので、ぜひWeb Security Academyを使って学んでみてください。

参考文献

[1] Web Security Academy
https://portswigger.net/web-security

[2] Burp Suite
https://portswigger.net/burp

[3] Web Security Academy (Twitter)
https://twitter.com/WebSecAcademy

[4] OWASP – Top 10 for LLM Applications
https://owasp.org/www-project-top-10-for-large-language-model-applications/

[5] Web Security Academy - Lab: Exploiting insecure output handling in LLMs
https://portswigger.net/web-security/llm-attacks/lab-exploiting-insecure-output-handling-in-llms

執筆者プロフィール

執筆者
original
50

中島 春香(なかしま はるか)
セキュリティ技術センター リスクハンティング・システムチーム

ペネトレーションテスト、脆弱性診断を通じたセキュア開発支援、セキュリティ人材育成に従事。
CTF for GIRLS 代表としてワークショップ・イベントの企画設計や講師を担当。
CISSP、CCSP、GCPN、認定Webアプリケーション脆弱性診断士を保持。 SANS SEC504, FOR508メダルを保持。
「Hardening II SU」 MVV(Most Valuable vendor)賞受賞。