
2026/09/25 4:54
ビルドログを利用した Sourcehut アカウント乗っ取り(ansi2html の XSS)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
SourceHut のビルドログ(
builds.sr.ht)は、サードパーティ製ライブラリ ansi2html が悪意のある OSC 8 ハイパーリンクを安全に解析しないことが原因で、約 4.5 年にわたり深刻なクロスサイトスクリプティング (XSS) 脆弱性に曝されていた。この脆弱性は ansi2html に 2021-09-03 に導入され、フラッグシップである SourceHut インスタンスには 2022-02-08 に展開された。影響を受けるのは ansi2html のバージョン >=1.7.0 から <1.9.4 および SourceHut のバージョン 0.40.0 から 0.105.1 までのインスタンスである。
攻撃者は CI やメーリングリストなどを通じてビルドジョブを構築し、
\33]8;;https://example.com/"/autofocus/tabindex="1"/onfocus="alertxss\7... のような特定の OSC 8 リンク文字列を含むペイロードを作成できる。このペイロードは未パッチのログビューアーで表示されると JavaScript を実行し、攻撃者が CSRF トークンを窃取したり、システム管理者として悪意のあるビルドジョブを提出したりする可能性がある。成功したエクスプロイトによって sr.ht のデプロイキーが暴露され、セッションハイジャッキングやリポジトリの侵害に至る。
公的な発表前に内部での開示が行われた:2026-08-01 に暫定パッチが送信され、メンテナーである Drew DeVault による公認は 2026-08-04 に行われた。
ansi2html の根本的な解析ロジックを修正する PR がマージされ、バージョン 1.9.4 が 2026-09-02 にリリースされた。Arch Linux はそのパッケージを固定されたバージョンに更新したのは 2026-09-05 で、builds.sr.ht および SourceHut の配布版にもパッチが適用された。提案された CVSS スコアリング(AV:N, AC:L, PR:N, UI:P, VC:H, VI:H)は、デプロイキーの暴露と管理者レベルのジョブ提出機能による高い重大性を反映している。
再発を防ぐためには、専門家は厳格な Content-Security-Policy ヘッダーの実装、
unsafe-inline スクリプトの除去、依存ライブラリの定期的な更新、ansi2html をステートフルなトランシューダを用いた再アーキテクチャによる誤った解析ロジックの排除を推奨している。この事例は、単一のライブラリ上の欠陥が整个エコシステムに影響を与える可能性があることを示しており、能動的なサプライチェーン衛生管理および防御的コーディング慣行の重要性を強調している。研究者是 CTF の背景を持ち、Antmicro で従事し、現在博士学位を取得中で、本研究成果から金銭的利益を得ていない者であり、責任ある開示手順を全過程で遵守した。本文
SourceHut 脆弱性情報発表:背景・発掘プロセスと対策
背景と経緯
- プロジェクトの立ち上げ
(SourceHut)のインスタンスをホストし、対価を得て運営する計画を立てました。sr.ht- この計画についてソーシャルメディア上で議論や批判を歓迎します。実際に試していただけたり、私を批判したりすることを推奨します。
- 研究アプローチ
- 最小限の
リポジトリセットを複製し、そこからハッキングを開始しました。sr.ht - 本研究では自然言語処理(NLP)は一切使用されておりません。 すべての過失は著者自身に帰します。
- 最小限の
発見された脆弱性の概要
SourceHut は複数のマイクロサービスで構成されていますが、特に以下のサービスが対象となります。
meta.sr.ht
/git.sr.ht
(フラッグシップインスタンスhub.sr.ht
)sr.ht
(CI サービス)builds.sr.ht
(現在は順次mirror.sr.ht
へ移行中):プリビルトパッケージを格納。mirror.srht.network
Alpine パッケージの構築と問題の発見
- 別の実装や Alpine の異なるバージョンを使用する場合は自己責任となりますが、
リポジトリへのフォークにより署名鍵やバージョン設定が可能です(Arch 向けのsr.ht-apkbuilds
は現状メンテナンスされていません)。sr.ht-pkgbuilds - CSS ログエラーの発見
のビルドログ表示ページで、ログが意図せずスクロールし続けるバグを発見しました。builds.sr.ht- 原因は以下の CSS クラスにありました:
.ansi38-150150150 { color: #969696; } /* 同じコードが繰り返されています */
- NLP を使わない理由
リポジトリでは過去 1 年以上更新されておらず、著者が独自に修正に取り組むことにしました。src
では無駄な計算資源や帯域幅が消費されており、改善すべき余地があると感じました。builds.sr.ht
脆弱性の詳細と影響
ANSI エスケープシーケンスを HTML に変換するロジック(
ansi2html)の解析において重大な欠陥が発見されました。
攻撃ベクトルの実証
特定の入力を処理すると、悪意のある JavaScript コードが実行される構造にパースされます。
1.
とイベントハンドラを注入する例autofocus
$ printf '\33]8;;https://example.com/"/autofocus/tabindex="1"/onfocus="alert`xss`\7Nothing to see here\33]8;;\7' | ansi2html # 結果: <a href="https://example.com/" autofocus tabindex="1" onfocus="alert`xss`">Nothing to see here</a>
2.
URI を注入する例javascript:
$ printf '\33]8;;javascript:alert`xss`\7Nothing to see here\33]8;;\7' | ansi2html # 結果: <a href="javascript:alert`xss`">Nothing to see here</a>
攻撃の条件と影響範囲
- 利用条件
という URL のビルドジョブページを表示するブラウザに対して実行されます。https://builds.sr.ht/~someone-else/job/1234567- アカウント保有者でなくても、パブリックメーリングリストへのパッチ送付(CI が有効な場合)や、ログに出力されるリモートリソースの制御が可能であれば利用できます。
- 攻撃手順
- 自らのペイロードを含むビルドジョブを作成・提出する(有料アカウントが必要な場合あり)。
- ページを表示するブラウザ上で悪意のあるスクリプトが自動実行される。
- 影響
- ページにはすでに CSRF トークンが含まれているため、
で取得可能です。document.querySelector('[name=_csrf_token]').value - 既存のフォーム(「Resubmit build」など)を悪用し、デプロイキーへのアクセス権限や管理者権限の付与が可能になるケースが想定されます。
- 最悪のシナリオ:すべてのデプロイキーにアクセスでき、インフラ全体が乗っ取られるリスクがあります。
- ページにはすでに CSRF トークンが含まれているため、
防御策(Defense in Depth)
- Content-Security-Policy (CSP) の制限
を削除することが有効ですが、ビルドログページ自体にスクロール機能を確保するためにインラインスクリプトが必要なため、単独では不十分です。'unsafe-inline'
- サニタイゼーションの追加
- 脆弱性緩和のため、出力から自動的に不正な要素を除去する処理を実装しました。
- コードの再設計
をステートフルなトランスジューサーオートマトンのような構造に再構築することで、根本的なセキュリティ向上を図りました。ansi2html
アップストリームへの対応と解決
コミュニケーションと貢献
- 問題報告後、アップストリームの開発者(Sebastian Pipping など)と連絡を取りました。
プロジェクトは現在 GitHub のansi2html
オブザーガネージ下にあり、メンテナンス体制が確保されています。pycontribs- 修復プロセス
- 著者が
のコードを修正し、Drew DeVault(SourceHut の関係者)から確認と公的な称賛を受けました。builds.sr.ht - アップストリーム側でも Sebastian Pipping 氏の率いるチームが対応し、ACL の問題を解決し、スクリプトの更新を行いました。
- 著者が
- リリース状況
- PyPI に合わせて複数バージョンをリリースし、脆弱性を完全に排除しました。
CVE 情報の詳細
CVSS スコアリングに関する考察を含め、公式な脆弱性情報として提出したデータです。
CVSS v4.0 ショートハンド表記
- AV:N(攻撃ベクトル:ネットワーク)
- AC:L(攻撃複雑性:低)、AT:N(要件なし)、PR:N(権限不要)、UI:P(ユーザーインタラクション:受動的)。
- ユーザーは JS を有効にしたサイトへのアクセスが必要ですが、解決は容易です。
- Vulnerable System(脆弱システム:builds.sr.ht / sr.ht 全体)
- VC:H(機密性影響:高):直接的で深刻な機密喪失(機密情報暴露)。
- VI:H(完全性影響:高):悪意のあるビルドジョブ提出によりデプロイキーにアクセス可能。
- VA:N(可用性影響:なし)。
- Subsequent System(被害者システム:ブラウザ)
- SC:L, SI:L(機密・完全性はスコープされた情報のみ)、SA:N(可用性には影響なし)。
脆弱性バージョン情報
| コンポーネント | 脆弱なバージョン | 修正済みバージョン |
|---|---|---|
| ansi2html | >=1.7.0, <1.9.4 | 1.9.4 以降 |
| builds.sr.ht | >= 0.40.0, < 0.105.1 | 0.105.1 以降 |
検出手順(インジケータ)
生ビルドログを確認し、以下の文字列を検出してください。
# Bash での探索例 grep '\33]8;[^\7\33]*"' 'build_log.txt'
脆弱性情報の背景と注意喚起
- CVSS スコアリングへの懸念
- 従来のスコアリングは幻想であり、製品ごとに個別の評価が必要です。
- 研究者による高スコア化の動機とプロジェクト側の低スコア化の動機(書類仕事や機密性の維持)が対立することがあります。
- 今回の場合、
などのライブラリを使用しているため、従来のアプローチでは評価が歪められる可能性があります。libcurl
- 緊急性について
- AV:N や VC:H のような深刻な影響はありますが、インフラに直接的危険をもたらす一方で、数年間放置されていた側面もあります(Amber レベル)。
- ただし、SourceHut が JavaScript なしでも動作している事実を考慮すると、実際のリスクは「中程度」よりも「高」または「クリティカル」と評価すべきです。
- 倫理的警告
- 脆弱性のテストやワームの実験は、必ず自社のインフラストラクチャのみで行ってください。生産環境でのテストは厳禁です。
- 興奮の正当化のために脆弱性を悪用することは絶対にしないでください。
タイムライン(完全版)
以下の通り、問題が解決されるまでの全行程を記録しています。
- 2019-03-11:
がansi2html
に追加され、その後builds.sr.ht
に追加。sr.ht-apkbuilds - 2021-09-03: バグがアップストリームの
に導入。ansi2html - 2022-02-08: 影響を受けるバージョンが Alpine パッケージ化され、フラッグシップインスタンスで運用開始。
- 2022-07-10: Arch Linux 用パッケージとして影響を受けるバージョンがパッケージ化される。
- 2026-07-17: ドメイン購入等の準備(※)
- 2026-07-31: SourceHut の作業開始。
- 2026-08-01: 問題報告と修正 PR (
アップストリーム)、予備パッチ送信。ansi2html - 2026-08-04:
コードでバグが緩和され、Drew DeVault から確認メールと称賛を受ける。builds.sr.ht - 2026-08-06: アップストリームへの問題報告即時承認。
- 2026-08-20 ~ 08-24: アップストリームの連絡と CI の整備。
- 2026-08-29: バグ修正なしのバージョン 1.9.3 リリース。
- 2026-08-31: ソフトウェアフォージでの支払いに関する記事への言及。
- 2026-09-02: 最終的な修正を含む PR をプッシュし、脆弱性修正版 1.9.4 リリース。
- 2026-09-05: Arch Linux で
の更新適用。ansi2html
※ 追記:注意してください。SourceHut を救うためにも审计(auditing)を慎重に行い、再実装を行うまで bump することは推奨されません。
はほぼ正確に 4.5 年間脆弱状態のまま置かれていました。builds.sr.ht
感謝とまとめ
- 感謝の声
- Blackhat の誘惑から守ってくれた神様に感謝します。
- Danonek123 には同行いただきありがとうございます。大好きです。
- 研究活動について
- 脆弱性情報調査はサーカスやセキュリティシアター、あるいは官僚主義への戦いになる必要はありませんが、その結果として良くなることもあります(かもしれない)。
- CTF やカンファレンスの招待、インターンシップを除き、本調査からの経済的収入は €0.00 です。
- 研究時間を確保したい場合は、寄付やプロフェッショナルなセキュリティコンサルティングのご依頼をお勧めします。
さらに良いコンテンツのために RSS を購読しておくと、最新の情報を逃しません!