Drag and Pwnd:ASCII制御文字でVS Codeを悪用するという発想
本記事は、PortSwigger Research 公開の「Drag and Pwnd: Leverage ASCII characters to exploit VS Code」を元ソースとして、その問題提起を日本語で整理します。追加の補足は、提示された関連ソースの範囲に限定します。
概要
PortSwigger Research の当該記事は、SOH(Start of Heading)、STX(Start of Text)、EOT(End of Transmission)、ETX(End of Text)といったASCIIの制御文字が、もともと「人間が読むテキスト」ではなく「機械同士の通信や制御」を想定していたにもかかわらず、現代のターミナルエミュレータの世界では状況次第で“コードの実行”に近い影響を持ち得る、という視点から始まります。ここで重要なのは、攻撃者がゼロから脆弱なバイナリを作るというよりも、「表示・コピー・貼り付け・ドラッグ&ドロップ」など、日常的なテキスト操作の経路に“忘れられた制御の仕組み”が紛れ込むことで、意図しない振る舞いが発生し得るという問題設定です。
この問題提起は、開発者が普段使うエディタや統合開発環境(ここではVS Code)を、単なる“編集ツール”ではなく、複数のサブシステム(表示、ターミナル、入出力、拡張機能など)が接続された複合的な実行環境として捉え直すことにつながります。テキストに見えるものが、実際には制御信号の断片を含み、受け手側の解釈で意味が変わる——そのギャップが、攻撃の糸口になり得る、というのが本稿の中心です。
詳細
元記事の導入文は、制御文字が「コードを走らせるために作られたものではない」一方で、「現代のターミナルエミュレータの世界では、時にそうなってしまう」と表現し、古い規約や機能が現代的な環境で別の性質を帯びる危うさを示します。ここでの“危うさ”は、単に歴史的な豆知識としての制御文字ではなく、開発現場の実務(ログ閲覧、出力のコピー、コマンドの貼り付け、チーム内共有など)に紛れ込む可能性がある点です。つまり、攻撃の成立条件が「特殊な操作」ではなく「よくある操作」に寄ってくるほど、対策の難しさが増します。
また、関連情報として、PortSwiggerの研究者ページでは本件がZakhar Fedotkin氏のリサーチとして整理され、公開日が2025年4月30日であることが示されています。さらに、同氏の他の研究(Cookieプレフィックスのバイパス、WAF回避に関するCookie解釈の“危険な機能”など)も同サイト内で紹介されており、入力の“解釈”や実装の“想定外の挙動”がセキュリティ上の境界を崩す、というテーマ性が近い領域で繰り返し扱われていることが読み取れます。今回の「Drag and Pwnd」も、文字やトークンを「ただのデータ」と思い込んだ瞬間に起こり得る齟齬を、VS Codeという具体的な環境に結びつけて提示する位置づけだと理解できます。
補助ソースの一つであるsocdefenders.aiの要約も、脅威の中心を「VS Codeにおける制御文字(SOH、STX、EOT、ETX)の悪用」と明示しており、問題の焦点が“不可視になりやすいASCII制御文字”である点を補強しています。ここから得られる実務的な含意は、攻撃者が狙うのは必ずしも複雑なバイナリエクスプロイトだけではなく、日常的な文字列処理・表示処理・貼り付け処理の境界で起こる「解釈のズレ」そのものだ、ということです。開発環境は便利さのために多様な入出力や拡張点を抱えますが、その“便利さ”の接続面に、古典的な制御の仕組みが混ざると、ユーザーの意図と異なる動作へ繋がり得ます。
出典
- 元ソースDrag and Pwnd: Leverage ASCII characters to exploit VS CodePortSwigger Research
- Researcher - Zakhar Fedotkin - PortSwiggerportswigger.net
- Cookie Chaos: How to bypass __Host and __Secureportswigger.net
- Bypassing WAFs with the phantom $Version cookie - PortSwiggerportswigger.net
- [XML] https://portswigger.net/sitemap.xmlportswigger.net
- Drag and Pwnd: Leverage ASCII characters to exploit VS Codesocdefenders.ai