ビルドログを利用した Sourcehut アカウント乗っ取り(ansi2html の XSS)

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="alert
xss
\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 脆弱性情報発表:背景・発掘プロセスと対策

背景と経緯

  • プロジェクトの立ち上げ
    • sr.ht
      (SourceHut)のインスタンスをホストし、対価を得て運営する計画を立てました。
    • この計画についてソーシャルメディア上で議論や批判を歓迎します。実際に試していただけたり、私を批判したりすることを推奨します。
  • 研究アプローチ
    • 最小限の
      sr.ht
      リポジトリセットを複製し、そこからハッキングを開始しました。
    • 本研究では自然言語処理(NLP)は一切使用されておりません。 すべての過失は著者自身に帰します。

発見された脆弱性の概要

SourceHut は複数のマイクロサービスで構成されていますが、特に以下のサービスが対象となります。

  • meta.sr.ht
  • git.sr.ht
    /
    hub.sr.ht
    (フラッグシップインスタンス
    sr.ht
    )
  • builds.sr.ht
    (CI サービス)
  • mirror.sr.ht
    (現在は順次
    mirror.srht.network
    へ移行中):プリビルトパッケージを格納。

Alpine パッケージの構築と問題の発見

  • 別の実装や Alpine の異なるバージョンを使用する場合は自己責任となりますが、
    sr.ht-apkbuilds
    リポジトリへのフォークにより署名鍵やバージョン設定が可能です(Arch 向けの
    sr.ht-pkgbuilds
    は現状メンテナンスされていません)。
  • CSS ログエラーの発見
    • builds.sr.ht
      のビルドログ表示ページで、ログが意図せずスクロールし続けるバグを発見しました。
    • 原因は以下の CSS クラスにありました:
      .ansi38-150150150 { color: #969696; }
      /* 同じコードが繰り返されています */
      
  • NLP を使わない理由
    • src
      リポジトリでは過去 1 年以上更新されておらず、著者が独自に修正に取り組むことにしました。
    • 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.

javascript:
URI を注入する例

$ printf '\33]8;;javascript:alert`xss`\7Nothing to see here\33]8;;\7' | ansi2html
# 結果:
<a href="javascript:alert`xss`">Nothing to see here</a>

攻撃の条件と影響範囲

  • 利用条件
    • https://builds.sr.ht/~someone-else/job/1234567
      という URL のビルドジョブページを表示するブラウザに対して実行されます。
    • アカウント保有者でなくても、パブリックメーリングリストへのパッチ送付(CI が有効な場合)や、ログに出力されるリモートリソースの制御が可能であれば利用できます。
  • 攻撃手順
    1. 自らのペイロードを含むビルドジョブを作成・提出する(有料アカウントが必要な場合あり)。
    2. ページを表示するブラウザ上で悪意のあるスクリプトが自動実行される。
  • 影響
    • ページにはすでに CSRF トークンが含まれているため、
      document.querySelector('[name=_csrf_token]').value
      で取得可能です。
    • 既存のフォーム(「Resubmit build」など)を悪用し、デプロイキーへのアクセス権限や管理者権限の付与が可能になるケースが想定されます。
    • 最悪のシナリオ:すべてのデプロイキーにアクセスでき、インフラ全体が乗っ取られるリスクがあります。

防御策(Defense in Depth)

  • Content-Security-Policy (CSP) の制限
    • 'unsafe-inline'
      を削除することが有効ですが、ビルドログページ自体にスクロール機能を確保するためにインラインスクリプトが必要なため、単独では不十分です。
  • サニタイゼーションの追加
    • 脆弱性緩和のため、出力から自動的に不正な要素を除去する処理を実装しました。
  • コードの再設計
    • ansi2html
      をステートフルなトランスジューサーオートマトンのような構造に再構築することで、根本的なセキュリティ向上を図りました。

アップストリームへの対応と解決

コミュニケーションと貢献

  • 問題報告後、アップストリームの開発者(Sebastian Pipping など)と連絡を取りました。
  • ansi2html
    プロジェクトは現在 GitHub の
    pycontribs
    オブザーガネージ下にあり、メンテナンス体制が確保されています。
  • 修復プロセス
    • 著者が
      builds.sr.ht
      のコードを修正し、Drew DeVault(SourceHut の関係者)から確認と公的な称賛を受けました。
    • アップストリーム側でも 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.41.9.4 以降
builds.sr.ht>= 0.40.0, < 0.105.10.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:
    builds.sr.ht
    コードでバグが緩和され、Drew DeVault から確認メールと称賛を受ける。
  • 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 することは推奨されません。

builds.sr.ht
はほぼ正確に 4.5 年間脆弱状態のまま置かれていました。

感謝とまとめ

  • 感謝の声
    • Blackhat の誘惑から守ってくれた神様に感謝します。
    • Danonek123 には同行いただきありがとうございます。大好きです。
  • 研究活動について
    • 脆弱性情報調査はサーカスやセキュリティシアター、あるいは官僚主義への戦いになる必要はありませんが、その結果として良くなることもあります(かもしれない)。
    • CTF やカンファレンスの招待、インターンシップを除き、本調査からの経済的収入は €0.00 です。
    • 研究時間を確保したい場合は、寄付やプロフェッショナルなセキュリティコンサルティングのご依頼をお勧めします。

さらに良いコンテンツのために RSS を購読しておくと、最新の情報を逃しません!

同じ日のほかのニュース

一覧に戻る →

2026/09/25 0:26

F-Droid 2.0

## Japanese Translation: F-Droid 2.0 は、10 年ぶりの最大のマイルストーンであり、Android との統合をより向上させるために Kotlin Compose を用いて完全に再構築されたコアを備えています。このアップデートは、ナビゲーションを「Discover」「Search」「My Apps」の 3 つの中核領域に簡素化し、「Discover」機能として更新およびダウンロードを強調する新機能を追加するとともに、カテゴリーと高度なフィルタリングも拡大しています。セキュリティと安定性は、Open Technology Fund からのもう一つの独立した審査、背景で Android アップデートを可能にする新しい事前承認 API、そして各種のプライバシー団体によってサポートされた 14 のリリースにわたる厳格なテストによって強化されています。しかし、ユーザーはいくつかの変更点に適応する必要があります:Android 6 へのサポートはシステム全体の修正のために終了され、旧バージョンを使用し続ける必要があります。プライバシーツールは簡素化され、アプリを隠すマスク機能はもはや機能の隠蔽ではなくアプリのリネームのみを実行し、Tor の自動検出は一般のプロキシ設定に移動しました、そして議論の対象となった「アプリの消去」緊急機能が削除されました。F-Droid が順次展開される中で、それは現代のデバイスにより安全で簡素化された体験を提供しながら、1 年以上の開発を通じて安全性の基準を維持しています。

2026/09/24 7:53

HN: タイムスニューバスタードのような呪われたフォントを作成する

## Japanese Translation: Bastardica は、既存の OpenType ファイルをブラウザ内で直接デジタル混合することにより、ユーザーが瞬時にカスタム Web フォントを作成できる画期的なローカルツールです。Times New Bastard といった以前のソリューションとは異なり、Pyodide および fontTools を使用して完全にオフラインで動作し、フォントが外部サーバーにアップロードまたは保存されることはありません。このプライバシー重視のアプローチは、ブラウザの組み込み機能を活用してリアルタイムのフォント合成を実現し、単純なフォントにおける視覚的な豊かさ向上およびグリフの配置改善のためにスケール調整や垂直オフセットなどの調整を適用します。このプロセスは、Times New Bastard や Easy Pete といった以前の実験的クリエイティブ作品に触発されています。ツールは OpenType テキスト整形が可能であるあらゆる環境(ブラウザ、デザインツール、印刷など)をサポートしますが、フォントの組み合わせには注意が必要です。3 つ以上のスタイルを混合すると、最初に選択されたフォントが交差点における形状を決定するようになり、グリフの衝突が発生する可能性があります(例:5 番目と 7 番目が 35 番目の交差点で衝突)。この問題を回避するために、開発者にはフォントのストライドとして素数を使用することが推奨され、これにより視覚的なコンフリクトを大幅に軽減できます。Bastardica は追加のライセンス条件を課さず、出典への言及は歓迎されますが必須ではありませんが、2 つのフォントを混合することは派生作品の作成となり、ユーザーには 2 つの元フォントの商用ライセンスを各自で検証する必要があります。無料フォントのおすすめソースには Google Fonts、UNCUT、Velvetyne、Font Squirrel、FontSpace、DaFont が含まれます。サポートに関する問い合わせについては [email protected] に連絡してください。最終的には、Bastardica はデザイナーに独自のタイポグラフィを瞬時に生成することを可能にしつつ、クリエイティブアセットと知的財産権について完全な制御を保証します。

2026/09/25 6:33

Show HN: Koi.rest – 錦鯉を見て心を落ち着けましょう

## Japanese Translation: ## 要約: 発達性脳機能障害(ADHD)を抱える失職した開発者のポールは、8 月に始まったストレスの多い時期に平和を見出すために、人工知能(AI)を用いて生きた仮想のコイの池を作成しました。複雑な JavaScript コーディングを一から習得して待つ代わりに、「完璧さは善敵なり」という哲学を掲げ、AI を活用することで技能ギャップを迅速につなぎ、物理的に構築することができないその時における「枯山水」のデジタル版を実現しました。このプロジェクトは、彼の失業闘争にとって重要な対処法であり、静けさへの単純な願望を誰もがアクセスできるオンライン体験へと変容させました。生成されたウェブサイトはすでに公開されており、不特定の人々がインターネット上で共同でコイが静かに泳ぐ様子を眺める共有空間を提供しています。結局のところ、このイニシアチブは、限られた技術能力や大きな個人的な困難を抱える個人でも、従来の大規模な訓練や完璧な条件を必要とせず、すぐに創造的な情熱を実体化し、デジタル上の絆を育むことができることを示しています。現在なお求職活動中のポールは、関心のある方々の連絡を歓迎しています。

ビルドログを利用した Sourcehut アカウント乗っ取り(ansi2html の XSS) | そっか~ニュース