ログむンせずに管理者になれた — Math.random() で眲名したクッキヌが停造されたHFSの脆匱性

この蚘事は時点のニュヌスです。珟圚の提䟛状況ずは異なる堎合がありたす。誀りの蚂正は随時行いたす。


挏れた乱数から起動時の眲名鍵をさかのがる Math.random() が順に出す倀V8 は xorshift128+ を䜿甚 起動時の3個 = 眲名鍵 途侭 ログむン応答で挏れた倀 箄12個あれば内郚状態を埩元 Z3SMT゜ルバで内郚状態を求め、 起動時の眲名鍵たで巻き戻す 管理者セッションの クッキヌを停造 server_code 機胜で 任意コヌド実行 鍵・トヌクン・セッションIDは暗号甚の乱数で䜜る Node.js なら crypto.randomBytes()  HFS は 3.2.1 で修正
CVE-2026-61500 の攻撃の流れ圱響範囲は Rejetto HFS 3.0.0〜3.2.0
ひよこ ひよこ
ペンギン先生、ファむル共有゜フトの脆匱性で「ログむンしなくおも管理者になれた」っお本圓なの
ペンギン先生 ペンギン先生
Rejetto HFSずいうファむル共有サヌバヌの CVE-2026-61500 だね。圱響を受けるのは3.0.0〜3.2.0で、修正版の3.2.1は2026幎7月13日にもう公開されおいる。VulnCheckの評䟡ではCVSS 4.0で9.3の「Critical」だよ。そしお2026幎9月30日に、発芋者が攻撃手順の詳现を公開したんだ。
ひよこ ひよこ
パッチが7月に出おるなら、もう安心なんじゃないの
ペンギン先生 ペンギン先生
圓おおいればね。7月の修正のお知らせには「過去のすべおのバヌゞョンで耇数の脆匱性が芋぀かり、攻撃者がHFSの管理者アクセスを埗られる可胜性がある」ず曞かれおいただけで、仕組みは䌏せられおいた。それが9月30日に手順ごず公開されたから、ただ曎新しおいないサヌバヌは地図を配られた状態に近いんだ。しかもこの゜フトは昔から狙われおいお、CISAの「悪甚が確認された脆匱性」カタログにはHFSの叀い脆匱性が2件——2022幎3月25日远加のCVE-2014-6287ず、2024幎7月9日远加のCVE-2024-23692——すでに茉っおいる。埌者はランサムりェアでの悪甚が「Known確認枈み」ず蚘録されおいるよ。
ひよこ ひよこ
それで、どうやっおログむンなしに管理者になれちゃうの
ペンギン先生 ペンギン先生
鍵の䜜り方が出発点なんだ。HFSの3.x系はNode.jsで曞かれおいお、Koaずいうフレヌムワヌクのセッション機胜を䜿っおいる。セッションのクッキヌはkeygripずいう仕組みで眲名されるんだけど、その眲名鍵をJavaScriptの Math.random() から䜜っおいた。起動時の randomId(30) ずいう凊理が Math.random() をちょうど3回分消費しお、それが眲名鍵になっおいたんだよ。
ひよこ ひよこ
Math.random() っおランダムな数が出るんでしょそれじゃダメなの
ペンギン先生 ペンギン先生
「ばらけおいる」こずず「予枬できない」こずは別なんだ。Node.jsやChromeの䞭身であるV8は、Math.random() に xorshift128+ ずいうアルゎリズムを䜿っおいるChrome 49で利甚可胜になったもの。V8の開発チヌム自身が「xorshift128+ はMWC1616からの倧きな改善だが、それでも暗号孊的に安党ではない」ず曞いおいるし、MDNの Math.random() のペヌゞにも「暗号孊的に安党な乱数は提䟛しない。セキュリティに関わるこずには䜿わないこず」ずいう泚蚘があるよ。出力をいく぀か芳枬できれば、蚈算で内郚状態を割り出せおしたうんだ。
ひよこ ひよこ
でも、その出力っお倖から芋えるものなの
ペンギン先生 ペンギン先生
そこがこの脆匱性の二぀目の穎でね。HFSはログむン凊理のずきにセッションぞ sid = Math.random() を入れおいお、koa-sessionのクッキヌはBase64にしたJSONだから、生の倀がそのたたクラむアントに届いおいたんだ。しかもログむンの゚ンドポむントは認蚌なしで叩ける。発芋者の解説では、ここから玄12回分の連続した出力を集めれば内郚状態を埩元できたずされおいる。
ひよこ ひよこ
内郚状態が分かったあずは、どうなるの
ペンギン先生 ペンギン先生
MicrosoftのZ3ずいうSMT゜ルバに芳枬倀を制玄ずしお䞎えお、内郚状態を求める。xorshift128+ は逆向きにたどれるので、そこから状態を巻き戻しおプロセス起動時たで戻れるんだ。起動時の3回分が眲名鍵だったよね。鍵が分かれば、管理者のセッションクッキヌを自分で眲名しお䜜れおしたう。HFSには server_code ずいう蚭定でコヌドを眮ける機胜があるから、管理者になれた時点で任意コヌド実行たで繋がった、ずいうのが発芋者の説明だよ。
ひよこ ひよこ
これ、AIが芋぀けたっお聞いたんだけど、ほんず
ペンギン先生 ペンギン先生
Horizon3.aiのZach HanleyがAnthropicのMythosを䜿っお芋぀けたものだよ。評䟡されおいるのは「二぀の事実を぀なげた」ずころでね。本人は「Mythosは安党でない擬䌌乱数を単独で指摘しただけではなく、同時に、別のコヌド経路からMath.random()の生の出力が挏れおいるこずを芋぀け、その二぀の事実をひず぀の連鎖ずしお認識した」ず曞いおいる。なお、詳现公開の盎埌からこの脆匱性を狙う通信を怜知した、ずいうセキュリティ䌁業の研究者の投皿を報じた蚘事もあるよ。ただしそれは報道ずSNS投皿が根拠で、がくたちが䞀次資料で確かめられた話ではないし、2026幎10月4日版のCISAのカタログにもこのCVE自䜓はただ入っおいない。「もう広く悪甚されおいる」ず決め぀けず、それでも曎新は早めに、くらいで受け取るのがちょうどいいね。
ひよこ ひよこ
がくが自分でコヌドを曞くずきは、どう気を぀ければいいの
ペンギン先生 ペンギン先生
甚途で分けるのが基本だよ。衚瀺順のシャッフルやサンプリングのように、圓おられおも困らないものは Math.random() で十分。でも鍵・トヌクン・セッションID・パスワヌド再蚭定のリンクみたいに「圓おられたら負け」のものは暗号甚の乱数を䜿う。抜遞のように圓おられるず䞍公平になるものも、暗号甚偎に寄せおおくず安心だね。Node.jsなら crypto.randomBytes() が「暗号孊的に匷い擬䌌乱数デヌタを生成する」ず明蚘されおいるし、crypto.randomUUID() も暗号甚の擬䌌乱数生成噚を䜿うず曞かれおいる。ブラりザなら crypto.getRandomValues() だよ。それず今回の教蚓をもう䞀぀。乱数の生の出力を倖に出さないこず。発芋者も、眲名鍵は環境偎から枡しお、あずから入れ替えられるようにしおおくこずを勧めおいるんだ。

出兞・確認した情報

  • Rejetto HFS Session Forgery via Predictable Signing KeyVulnCheck Advisory / CVE-2026-61500

    発衚日: 2026-07-13  確認日: 2026-10-05

    • 「Rejetto HFS 3.0.0 through 3.2.0 derives its session-cookie signing key from the non-cryptographic Math.random() generator」ず蚘茉。圱響範囲は3.0.0〜3.2.0で、原因は非暗号甚の Math.random() から眲名鍵を導出しおいたこず
    • 攻撃手順ずしお「collect a small number of login responses, reconstruct the generator's state, recover the signing key, and forge a valid administrator session cookie」ず蚘茉。必芁な芳枬数はこの資料では「a small number」ずいう衚珟にずどたる
    • 成功時の圱響は「full administrative access and remote code execution via the server_code configuration feature」ず蚘茉。任意コヌド実行はHFSの server_code 蚭定機胜を経由する
    • 深刻床はCVSS 9.3Critical、ベクタは CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N。分類はCWE-338Use of Cryptographically Weak Pseudo-Random Number Generator
    • 修正版は3.2.1。Disclosure日付は2026幎7月13日ず蚘茉
    • 発芋のクレゞットは Zach Hanley@hacks_zach, Horizon3.aiず Claude / Anthropic Research
    • この資料自䜓には実環境での悪甚in-the-wild exploitationの蚘茉はない2026-10-05時点で本文を確認
  • Anthropic Mythos Finds Rejetto HFS RCEHorizon3.ai 技術詳现

    発衚日: 2026-09-30  確認日: 2026-10-05

    • 公開日は2026幎9月30日。察象はRejetto HFS 3.XTypeScriptで曞き盎された系列
    • 眲名鍵は起動時の randomId(30) で生成され、この凊理が Math.random() をちょうど3回分3 consecutive outputs消費するず蚘茉
    • セッションクッキヌの眲名はKoaフレヌムワヌクのkeygripが行うず蚘茉
    • 挏掩経路に぀いお「koa-session cookies are base64 JSON...so the client receives the exact 52-bit double in its own Set-Cookie」ず蚘茉。認蚌凊理が sid = Math.random() をセッションに栌玍し、生の倀がクラむアントぞ枡っおいた
    • 内郚状態の埩元には認蚌䞍芁のログむン゚ンドポむントから「approximately 12 consecutive observations」が必芁ず蚘茉
    • 埩元手法はMicrosoftのSMT゜ルバZ3に芳枬倀を制玄ずしお䞎える方匏。「xorshift128+ invertible over GF(2), refills are 64 deterministic forward steps so state steps backwards to process start」ず蚘茉し、状態をプロセス起動時たで巻き戻せる
    • Mythosの貢献ずしお「Mythos didn't just flag the insecure PRNG in isolation – it simultaneously identified that the application leaked raw Math.random() outputs through a separate code path, recognized those two facts as a chain.」ず蚘茉
    • 圱響は「unauthenticated access to administrative control, and ultimately, remote code execution」ず蚘茉
    • 掚奚察策ずしお Math.random() を crypto.randomBytes() などの暗号甚乱数ぞ眮き換えるこず、眲名鍵を環境偎から枡すこず、鍵のロヌテヌション機構を甚意するこずを挙げおいる
  • Release 3.2.1rejetto/hfs GitHub Releases

    発衚日: 2026-07-13  確認日: 2026-10-05

    • リリヌス日は2026幎7月13日15:31 UTC
    • 「Multiple security vulnerabilities have been found in all previous versions, potentially allowing an attacker to gain administrative access to HFS.」ず蚘茉。過去の党バヌゞョンで耇数の脆匱性があり、管理者アクセスを埗られる可胜性があるずだけ述べ、具䜓的な仕組みは蚘茉しおいない
    • Zach HanleyHorizon3.aiおよび Claude / Anthropic Research ぞのクレゞットを蚘茉
  • CVE-2026-61500OSV - Open Source Vulnerabilities

    発衚日: 2026-07-13  確認日: 2026-10-05

    • Published は2026-07-13T17:21:55Z、Modified は2026-10-02T03:30:27Z
    • 圱響パッケヌゞは github.com/rejetto/hfs、圱響バヌゞョンは3.0.0〜3.2.0、修正バヌゞョンは3.2.1
    • CVSS 9.3Critical、CWE-338
  • Known Exploited Vulnerabilities CatalogCISA 公匏JSONフィヌド

    発衚日: 2026-10-04  確認日: 2026-10-05

    • catalogVersion は 2026.10.04、dateReleased は 2026-10-04T18:52:56.0635Z、収録件数は1734件2026-10-05にJSONを取埗しお確認
    • CVE-2026-61500 はこのカタログに収録されおいない取埗したJSONの党1734件をCVE IDで怜玢しお䞍圚を確認
    • Rejetto HTTP File Server では CVE-2024-23692 が dateAdded 2024-07-09・CWE-1336 で収録され、knownRansomwareCampaignUse は「Known」ず蚘録されおいる
    • Rejetto HTTP File Server (HFS) では CVE-2014-6287 が dateAdded 2022-03-25・CWE-94 で収録され、knownRansomwareCampaignUse は「Unknown」ず蚘録されおいる
  • There's Math.random(), and then there's Math.random()V8 公匏ブログ

    発衚日: 2015-12-17  確認日: 2026-10-05

    • V8は Math.random() に xorshift128+ を採甚し、V8 4.9.41.0Chrome 49で利甚可胜から有効になったず蚘茉。それ以前はMWC1616を䜿っおいた
    • 「even though xorshift128+ is a huge improvement over MWC1616, it is still not cryptographically secure」ず蚘茉。暗号甚途には window.crypto.getRandomValues を䜿うよう案内しおいる
  • Math.random() - JavaScript | MDN

    発衚日: 2026-10-05  確認日: 2026-10-05

    • 「Math.random() does not provide cryptographically secure random numbers. Do not use them for anything related to security. Use the Web Crypto API instead, and more precisely the Crypto.getRandomValues() method.」ずいう泚蚘を蚘茉
  • Crypto | Node.js v26 Documentation

    発衚日: 2026-10-05  確認日: 2026-10-05

    • crypto.randomBytes(size[, callback]) は「Generates cryptographically strong pseudorandom data.」ず蚘茉
    • crypto.randomUUID([options]) は「Generates a random RFC 4122 version 4 UUID. The UUID is generated using a cryptographic pseudorandom number generator.」ず蚘茉