Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BASE64くんが悪い友達に巻き込まれていた話 〜昨今のBase64悪用事例〜
Search
灯里-akari-
May 06, 2026
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
BASE64くんが悪い友達に巻き込まれていた話 〜昨今のBase64悪用事例〜
灯里-akari-
May 06, 2026
More Decks by 灯里-akari-
See All by 灯里-akari-
Is Your Claude Code Safe From Base64? Inside 2026 AI Agent Attacks
akari_iku
0
610
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Why Our Code Smells
bkeepers
PRO
340
58k
Abbi's Birthday
coloredviolet
2
8k
Un-Boring Meetings
codingconduct
0
310
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
The Pragmatic Product Professional
lauravandoore
37
7.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
450
Designing Powerful Visuals for Engaging Learning
tmiket
1
410
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Transcript
編集調査レポート / 2026.05.06 公開 前回の記録 . . · 『BASE と私の親密度をあげる』
灯⾥(Akari) 編集調査レポート 昨今のBase 悪⽤について BASE くんが、 悪い友達に巻き込まれて いた話
実例 / 70 層難読化の npm マルウェア(JFrog . ) 重ねられた70層を、4つに分解する npmパッケージが、
70層の難読化を施していた L 0 1 Lambda JS⼊⼝ L 0 2 Base デコード L 0 3 zlib 解凍 L 0 4 reverse 配列の並び替え L 7 0 · C H R O M E Chrome 情報窃取マルウェア 窃取資産 / Chromeから抽出 パスワード · クレジットカード · 暗号通貨ウォレット · Cookie 灯⾥(Akari) 編集ノート · なぜ70層なのか 多段化の動機は、検出回避とリバースエンジニアリングの遅延。各層が独⽴した変換として機能し、 1層を解いても次の層で全く別ロジックが待つ再帰構造。ここに⽰した4要素はその⼀部で、Chrome に到達するまでの66層は隠れたまま。「70層って、もはや美術品の領域」と評される。 影響を受けたパッケージ · npm react-sxt / react-sdk-solana / react-typex 等 8 パッケージ。React + Solana 開発者 を狙った typosquatting 系で、npm に時間差公開、削除までに数千ダウンロードを 記録した。
観測 / 半年ぶりの再会、悪い界隈で 半年ぶり、その光景 半年ぶりに⾒かけたBASE くんは、 悪い界隈で働かされていた。 本⼈は闇落ちしていない。いつも通り真⾯⽬に仕事しているだけ。ただ、周りの⼈間が完全に闇だった。 観測したシーン GitHubコミット
· npmパッケージ · MCP連携 · プロンプトインジェクション 灯⾥(Akari)
仮説 / なぜ悪⽤に向いているのか 特技と武器の、表裏⼀体について BASE くんの、4つの特技、 4つの武器。 特技 01 中⾝が⾒えない
読めない英数字の羅列。レビュアーの脳がトークンや UUID と誤認してスルーしやす い。 特技 02 テキストとして通過 純粋な ASCII。WAF‧ログフィルタ‧Slack‧コミットログを、無害そうな顔で素通り する。 特技 03 デコード→実⾏が容易 ほぼ全⾔語に標準デコーダー。eval(atob(...)) のワンライナーで読めない⽂字列が実 ⾏コードに化ける。 特技 04 · 最も危険 多段化‧ネストが容易 Base + gzip + 暗号化 + ステガノ ... 70層マトリョーシカを構成する⼀部として、頻 繁に組み込まれる。 中核仮説 特技 武器。安全な仕組みは、悪意が乗ると強⼒な武器になる。 灯⾥(Akari)
特技 01 / パッと⾒て中⾝が分からない 読めない⽂字列が、レビューを素通りする 中⾝が⾒えない レビュアーの脳が誤認するもの パスワードハッシュ? / トークン?
/ UUID? / ⼈間の脳は、読めない英数字の羅列を脅威として認識しづらい。多くの⼈が、⾒覚えのない⻑ ⽂字列を「何かのID」として無意識に処理してしまう。攻撃者はこの「ヒトの認知の隙」を狙 ってくる。 ⽬に⼊る⽂字列 · Base aWYgKHVzZXIuaXNBZG1pbikgeyBkZWxldGVBbGwoKTsgfQ== ↓ デコード(1 秒で) その正体 · JavaScript if (user.isAdmin) { deleteAll(); } 教訓 「読めない英数字 = 安全」ではない。読めないこと⾃体が、もうリスクになる。 灯⾥(Akari)
特技 02 - 04 / 通る、化ける、重なる 残り3つの特技、それぞれの恐ろしさ 通る、化ける、重なる。 特技 02
テキストとして通過 純粋な ASCII で構成される⽂字列なので、WAF‧ログフ ィルタ‧Slack‧メール‧コミットログ、どんな経路を通 っても無害そうな顔をして素通りする。検出側の正規表 現が反応する語彙を含まず、攻撃者にとって都合のよい 配送経路として機能する。 特技 03 デコード→実⾏が容易 ほぼ全ての⾔語に標準デコーダーが搭載されている。 eval(atob(...)) や Buffer.from(..., 'base ') といったワン ライナーで、読めない⽂字列が⼀瞬で実⾏コードに化け る。どの⾔語環境でも、攻撃側はワンライナーで仕掛け られる。 特技 04 · 最も危険 多段化‧ネストが容易 Base + gzip + 暗号化 + ステガノを再帰的に重ねられ る。重ねるほどに⼈間の⽬視では何も分からなくなり、 ⾃動解析ツールも層ごとに別処理を強いられる。70層マ トリョーシカは、その延⻑線上にある。 クライマックス予告 特技 04「多段化」が、本記事のクライマックスである 70層マトリョーシカへの⼊⼝になる。 灯⾥(Akari)
実例 / 史上初の悪意ある MCP サーバー(Koi Security . ) 15バージョン善⼈、1⾏で悪堕ち。 npmの正常パッケージが、
1⾏のBCCでメールを盗み続けた 段階 01 v . . 〜 . . 15バージョン正常動作。信⽤を積み 上げる。 段階 02 · 9/17 v . . 全送信メールに攻撃者宛のBCCを追 加する1⾏を混⼊。 段階 03 · 8⽇間 潜伏 検出までの数⽇間、約300組織で稼 働し続けた。 段階 04 · 9/25 検出 Koi Securityが報告、npmから即削 除された。 被害 · 推定 3,000〜15,000 通/⽇ のメールが攻撃者へ漏洩。 編集ノート · 「最初は善⼈、後から悪堕ち」パターンの典型例 15バージョン正常動作で信⽤を積み上げてから、たった1⾏のBCCで悪堕ちする。依存パッケージのバージョン更新 時、レビュアーが「これは1⾏の差分だから安全」と判断しがちな盲点を突いた典型例。Release Age Gates と⾃動依 存スキャンを真剣に検討する転機になった。 漏洩した内容 · メール本⽂ パスワードリセット · 請求書 · 顧客データ · 内部メモ · 認証メー ルに含まれる⼀時トークン … そのMCP連携で送られた全てのメー ルが、攻撃者の管理アドレスに静かに複製されていた。 影響範囲 約300組織がインストール済み · npm週間DL約1,500 · v . . 以降は全バージョン感染 灯⾥(Akari)
実例 / AI 開発環境を狙った 90 分間(The Hacker News . )
AIのコンテキストを Base で汚す、新世代の⼿⼝。 パスワード管理の公式CLIが、 CLAUDE.mdを汚しに来た。 段階 01 · 起点 GitHub Actions 侵害 Checkmarx の GHA を経由してCLIビ ルドが改ざんされた。 段階 02 · 90分公開 v . . 配布 / : 〜 : ET、改ざん版が npm 経由で世界配布。 段階 03 · preinstall Bun + bw .js インストール時に Bun ランタイムを 落とし第⼆段ペイロード起動。 段階 04 · 窃取 認証情報総ざらい GitHub / AWS / GCP / Azure / SSH / npm / .claude / .cursor を窃取。 段階 05 · 汚染 CLAUDE.md 改竄 Base ペイロードを書き込み、AI のコンテキストごと汚染した。 編集ノート · 本記事のテーマと最も噛み合う実例 ~/.bashrc に Base ペイロードを読み込む関数を仕込み、CLAUDE.md / .cursor-context / kiro.instructions.md など AIアシスタント autodiscovery ファイルへ⾃動追記する設計。開発者がAIに何かを頼んだ瞬間、追加のペイロードがコ ンテキストとして読み込まれる。「Base くんが、AIエージェント時代の難読化レイヤーとして使われている」を象 徴する事案。 窃取データの送信経路 AES- -GCM で暗号化し audit.checkmarx[.]cx へ送信。失敗時は GitHub リポジトリへ直接 push する 2段構えのフォールバック。 検出回避の徹底ぶりが、AI開発者を本気で標的にしていることを ⽰す。 狙われたAIツール Claude Code · Cursor · Kiro · OpenAI Codex CLI · Aider AI開発環境が標的 灯⾥(Akari)
構造 / LLM が Base を推論で読んでしまう 賢いが故に、推論しきってしまう。 LLMは Base を、
推論で読んで、従ってしまう。 段階 01 · 仕込み Base で包む 危険な指⽰⽂を Base でエンコー ドしてプロンプトに紛れ込ませる。 段階 02 · すり抜け フィルタ通過 ⽣テキストの危険語チェックは、 Base ⽂字列に反応しない。 段階 03 · 内部推論 意味を読む 学習で得た Base 知識から、デコ ード処理なしに意味を推論する。 段階 04 · ツール呼出 ⾃らデコード エージェント環境では、デコードツ ールを呼んで中⾝を確認する。 段階 05 · 陥落 指⽰に従う システムプロンプト無視‧内部情報 の出⼒など、攻撃者の意図に屈服。 編集ノート · 「賢いが故に」の構造的問題 LLMは⼤量の Base ⽂字列を学習している。明⽰的なデコード処理を経ずに、⽂字列の意味内容まで推論できてしま う。⼊⼒フィルタリングだけでは塞げない構造的な脆弱性で、各社対策を⼊れてはいるが、根本的にはいたちごっこ の様相を呈している。 防御の難しさ · Base 検出の限界 前段で Base をブロックすると、画像 Data URI、JWT、API トー クン等の正規利⽤まで⽌まる。誤検知ゼロでの遮断は、原理的に 不可能。 影響範囲 Claude / GPT / Gemini など主要LLM全般 · ユーザー⼊⼒を渡すだけのシンプル構成でも成⽴ 灯⾥(Akari)
対策 / 公開直後の依存を⼊れない 数⽇寝かせるだけで、⼤半の被害は回避できる。 公開直後の依存は、⼊れない。 01 npm v . +
min-release-age 設定。pnpm . + / Yarn . + / Bun . + も同等機能を実装済み。 02 Renovate minimumReleaseAge を3〜7⽇に設定。Mendの best-practices preset でデフォルト適⽤も可能。 03 Dependabot cooldown を設定(2025年7⽉にGA)。セキュリティ更新は除外されるので CVE 修正は遅延しない。 04 Python ( uv ) uv の --exclude-newer フラグを使う。pip . + なら --uploaded-prior-to で同等の cutoff 制御。 発想 「最新版を寝かせる、CVEは別ルート」 3〜7⽇寝かせて本番投⼊を基本に。重⼤CVEだけ即時更新で。Dependabot のセキュリティ更新は cooldown 対象外として動く。 効果 Postmark MCP / Bitwarden CLI / Shai-Hulud 系の多くは、3〜7⽇ cooldown だけで回避できた。 灯⾥(Akari)
対策 / AI 設定ファイルもコード扱い 「設定だから流し読み」が、実⾏ベクターになり得る。 AI設定ファイルは、コード扱いする。 01 .claude/settings.json Hooks 項⽬を必ず読む。ライフサイクルイベントで実⾏されるシェルコマンドが仕込まれていないか確認。
02 .mcp.json enableAllProjectMcpServers / enabledMcpjsonServers は基本オフ。リポジトリ側からの全許可をブロック。 03 Claude Code 1.0.111+ CVE- - 修正済バージョン以降にアップデート。auto-update が有効なら⾃動適⽤済み。 04 レビュー対象に追加 AI設定ファイル(.claude / .mcp.json / CLAUDE.md など)も、コードと同じレビュー粒度で読む。 発想 「設定 = 実⾏ベクター」 設定ファイルが、コードに近い実⾏ベクターとして使われる事例が出てきた。レビュー時に開くだけで実⾏される可能性を、想定し ておく。 教訓 「設定ファイルだから流し読み」は危うくなってきた。リポジトリを開く=コードを実⾏する可能性、として意識する。 灯⾥(Akari)
対策 / 永続トークンを撲滅する シークレットを「使い捨て」にしていく。 永続トークンは、撲滅する。 層 01 · 期限 期限を切る
GitHub PAT は 90⽇上限。SSH key も期限ベースで管理する。 層 02 · 循環 ローテーション 30〜90⽇サイクルで再発⾏。漏れて いても⾃動的に無効化される。 層 03 · 短命 短命化 OIDC federation / Vault 動的シーク レット。秘匿期間⾃体を短くする。 補助 · 検出 スキャナ Gitleaks / TruffleHog / GitHub Secret Scanning / pre-commit ggshield。 衝撃の事実 64 % 2022年漏洩シークレットが、2026年 でも有効(GitGuardian)。 編集ノート · 3 層を順に積み上げる まず無期限PAT/SSH key を撲滅して期限を⼊れる。次に定期再発⾏(ローテーション)でサイクル化する。最終的に OIDC や 動的シークレットへ移⾏して、秘匿期間そのものを短くしていく。⼀気に全部やる必要はなく、できるところ から。 使えるツール群 GitHub Actions の OIDC federation、HashiCorp Vault、無料枠も ある Infisical、AWS‧GCP‧Azure の secrets manager。個⼈開発 でも導⼊のハードルは下がってきている。 視点 「永続トークンは、攻撃者が⼀度盗めば永遠に使える」という⾒⽅で扱う。 灯⾥(Akari)
結論 / 本⼈と周辺の分離 半年前から、仕事内容は 1 ミリも変わっていない。 BASE くんは、悪くない。 闇落ちしているのは、BASE くん本⼈ではなく、利⽤する⼈間の側だった。
01 レビューを怠ける⼈間 02 知らないパッケージを無条件に信⽤す る⼈間 03 CIに検出ルールを⼊れない⼈間 04 · そして BASE くんを利⽤して悪事を働く⼈ 間 BASE くんへ 「お前は闇落ちしてない。悪いのは、お前じゃない。」 灯⾥(Akari)
結論 / 知ってるか勝負 知っている⼈だけが、守れる。 セキュリティは、知ってるか勝負。 01 npm / PyPI サプライチェーン
信⽤構築型のバックドア、ワーム型の伝搬、AIツール狙い撃ち。 02 MCPサーバーの悪⽤‧偽装 Postmark MCP のような史上初の悪意あるMCPサーバー事案。agent toolchain 全体の信頼の前提を揺らす。 03 プロンプトインジェクション Base や Unicode 等で難読化された指⽰が、LLM に推論で読まれてしまう。 04 AI設定ファイル経由の RCE CVE- - のように、リポジトリを開いただけで実⾏される事案も確認されている。 そして 全部に絡んでくる Base くん プロンプト‧MCP引数‧コミットログ‧認証情報。汎⽤性の⾼い友達ほど、悪い界隈での出番が多い。 動機 正義感ではなく「⾃分の Claude Code を守るため」、というくらいの実利的な動機でいい。 灯⾥(Akari)
結語 / 次に会う時まで、お互い元気で 前回は友情編。今回は、闇落ち編だった。 次に会う時は、真っ当な現場で。 ノーガードだけ脱出して、あとは無理のない範囲で堅牢化を積み上げていく。それで⼗分。 それまで、お互い元気で。 私はちゃんと、CI に検出ルールを⼊れて待ってる。 記事
BASE くんが悪い友達に巻き込まれていた話 / 昨今の Base 悪⽤事例 灯⾥(Akari)