2026年9月4日 金曜日
AI時短ラボ
検証· 約15

huggingface_hubに「revisionを1回だけ解決する」機能とパストラバーサル脆弱性の修正が同時収録された

huggingface_hub v1.26.0(2026年7月30日)に、モデルの複数ファイルを同一コミットからまとめてダウンロードできるresolve_revisionと、CVE-2026-15717として修正されたパストラバーサル脆弱性の対策が同時に収録された。両方の一次リリースノートを確認した。

huggingface_hubに「revisionを1回だけ解決する」機能とパストラバーサル脆弱性の修正が同時収録された
執筆・編集:
目次

Hugging Faceのモデルをコードから落とすとき、config.jsonmodel.safetensors・トークナイザー・プロセッサ設定など、ファイルを1つずつhf_hub_downloadで取得しているライブラリは多い。その際に地味だが実害のある問題があった。revision="main"のようなブランチ名を、呼び出しのたびにコミットハッシュへ解決していたことだ。huggingface_hub v1.26.0(2026年7月30日公開)のリリースノートは、この問題と解決策をこう説明している。

revisionを1回だけ解決するresolve_revision

Libraries that download many files one by one (config, weights, tokenizer, processor, ...) had to resolve revision="main" into a commit hash on every call — costing one HTTP request per file and risking two calls landing on two different commits if the repo is updated in between. The new HfApi.resolve_revision resolves the revision once and returns a ResolvedRevision: a str subclass whose value stays the user-facing revision (so error messages keep saying "main") while its .resolved attribute holds the commit hash.

(設定・重み・トークナイザー・プロセッサなど、ファイルを1つずつダウンロードするライブラリは、呼び出しのたびにrevision="main"をコミットハッシュへ解決する必要があった——これはファイルごとに1回のHTTPリクエストを要し、途中でリポジトリが更新されると2回の呼び出しが異なる2つのコミットに着地するリスクを伴う。新しいHfApi.resolve_revisionは、revisionを1回だけ解決してResolvedRevisionを返す:strのサブクラスで、値そのものはユーザー向けの表示用revision(エラーメッセージは引き続き"main"と表示される)のままだが、.resolved属性にコミットハッシュを保持する)

リリースノートに掲載されているコード例では、resolve_revision("openai-community/gpt2")を呼ぶとResolvedRevision(initial=None, resolved='607a30d783dfa663caf39e06633721c8d4cfcd7e')が返り、これをhf_hub_downloadrevision引数にそのまま渡せば、config.jsonmodel.safetensorsの両方が同じコミットから取得されることが保証される。このマッピングはキャッシュのrefs/フォルダにも書き込まれ、オフラインモードでの再実行時にはキャッシュされた値へ自動的にフォールバックするとも書かれている。

パストラバーサルの脆弱性修正(CVE-2026-15717)

同じv1.26.0には、セキュリティ修正2件が含まれている。1件目はこう説明されている。

First, downloading or uploading to a --local-dir now rejects absolute, drive-relative, root-relative, UNC and ..-traversal filenames on all platforms, interpreting each name under both POSIX and Windows rules (refs CVE-2026-15717). Previously only a Windows-only ..\ check existed, so a malicious repo could write files outside the target directory on Windows clients — and even leak a NetNTLMv2 hash via UNC paths.

(1つ目:--local-dirへのダウンロード・アップロードは、絶対パス・ドライブ相対パス・ルート相対パス・UNCパス・..によるトラバーサルを、すべてのプラットフォームで拒否するようになった。POSIXとWindows双方のルールで各ファイル名を解釈する(CVE-2026-15717参照)。これまではWindows限定の..\チェックしか存在せず、悪意あるリポジトリがWindowsクライアント上でターゲットディレクトリの外にファイルを書き込める——UNCパス経由でNetNTLMv2ハッシュを漏洩させることさえできる——状態だった)

つまり、悪意あるファイル名を持つファイルを含むリポジトリをダウンロードすると、Windows環境では意図しない場所にファイルが書き込まれる可能性があった、という脆弱性だ。リリースノートは「正当なリポジトリのファイル名がこうしたセグメントを含むことはないため、通常のダウンロードには影響しない」と補足している。

2件目の修正はサンドボックス関連だ。

Second, Sandbox.create no longer injects your HF token into the job environment to download the sbx-server binary: the bucket is public, so the bootstrap now downloads it anonymously and no HF credential ever lands in the sandbox unless you explicitly opt in with forward_hf_token=True.

(2つ目:Sandbox.createは、sbx-serverバイナリをダウンロードするためにHFトークンをジョブ環境へ注入しなくなった。バケットは公開されているため、ブートストラップは匿名でダウンロードするようになり、forward_hf_token=Trueで明示的にオプトインしない限り、HF認証情報がサンドボックスに渡ることはない)

v1.26.0の変更点を4カテゴリで整理する

リリースノート全体を見出しレベルで整理すると、v1.26.0は次の4カテゴリの変更を1回のマイナーバージョンに収めていたことが分かる。

カテゴリ 主な変更 対応PR
revision解決の効率化 HfApi.resolve_revisionで複数ファイルを同一コミットから取得 #4604
セキュリティ修正 CVE-2026-15717(パストラバーサル)、Sandbox.createのHFトークン漏洩 #4540、#4583
Jobs/Collectionsの機能拡張 リソースグループ対応、Job名のCLI表示改善 #4575、#4576、#4568
バグ修正 safetensorsヘッダー切り詰め、Xetハッシュ拒否、Windows Unicode crash等 #4603、#4595、#4610、#4612

新機能とセキュリティ修正が同じリリースに同居する理由

resolve_revisionという利便性の向上と、CVE番号付きの脆弱性修正が同じマイナーバージョンに同居しているのは、オープンソースライブラリのリリースサイクルではよくあることだが、利用者側は「新機能が入った」という見出しだけを見て、同時にセキュリティ修正も入っていることを見落としやすい。huggingface_hub--local-dir付きで使っている、あるいは信頼していないリポジトリからファイルをダウンロードする場面がある場合は、このバージョンへの更新自体に意味がある。

同じリリースにはもう1つ、別の大きな機能追加があった

タイトルには出てこないが、v1.26.0のリリースノート原題は「Resolve revisions only once, security hardening, and resource groups for Jobs & Collections」で、実は3本柱の3本目がある。

Organization resource groups are now supported across the client. For collections, create_collection accepts an optional resource_group_id, and the new update_collection_resource_group method wraps the dedicated Hub endpoint to assign a collection to a resource group afterwards (passing None removes it). For Jobs, run_job, run_uv_job and create_scheduled_job accept a resource_group_id parameter, mirrored by a --resource-group-id option on the hf jobs run, hf jobs uv run and hf jobs scheduled run commands. Beyond access control within an organization, resource groups are also used for cost attribution and per-group spending limits.

(組織のリソースグループが、クライアント全体で使えるようになった。Collectionsではcreate_collectionが任意のresource_group_idを受け取れるようになり、新設のupdate_collection_resource_groupメソッドで後からリソースグループを割り当てられる(Noneを渡すと解除)。Jobsではrun_jobrun_uv_jobcreate_scheduled_jobresource_group_idパラメータを受け取り、CLIのhf jobs runhf jobs uv runhf jobs scheduled runには--resource-group-idオプションが対応する。組織内のアクセス制御だけでなく、コスト帰属や、グループ単位の支出上限にもリソースグループが使われる)

hf jobs run --resource-group-id <group-id> python:3.12 python train.py

つまりv1.26.0は、「ダウンロードの堅牢化」だけでなく、「組織アカウントでのJobs実行を、コスト管理単位ごとに分離できるようにする」というエンタープライズ寄りの機能拡張も同時に含んでいた。あわせてhf jobs ls(およびhf jobs scheduled ls)にJob名を表示するNAME列と--nameフィルタが追加され、これまでlabelの中にしか無かったJob名がトップレベルのフィールドとしてhf jobs inspectやコマンド結果に出るようになった、ともリリースノートは説明している。

ついでに直ったバグ:100,000バイトちょうどのsafetensorsヘッダーが読めなかった

同リリースには地味だが具体的なバグ修正も含まれている。PR #4603(修正者コメントは2026年7月29日付、Cursorが編集アシストしたPR説明文と明記)によれば、parse_safetensors_file_metadatabytes=0-100000というHTTPレンジリクエストを送るが、HTTPのバイトレンジは両端含む(inclusive)仕様のため、実際には100,001バイトが返る——内訳は8バイトのサイズプレフィックスと、99,993バイトのヘッダー本体だ。ところがコードはmetadata_size <= 100000という条件でヘッダーサイズを判定していたため、ヘッダーが99,994〜100,000バイトちょうどのモデルファイルだけ、サイレントに切り詰められてheader is not json-encoded stringというエラーで失敗していた、という。この不具合はコミュニティの@joe0731氏による「非常に正確な報告」(PR本文の謝辞)がきっかけで見つかり、修正は「実際に受信したバイト数と比較する」という1行の変更だったという。

CVE-2026-15717の詳細な影響範囲までは追っていない

本記事はv1.26.0のリリースノート本文のみを情報源としている。CVE-2026-15717の共通脆弱性評価システム(CVSS)スコアや、National Vulnerability Databaseなど外部のCVEデータベース上での詳細な記載は、本記事の調査範囲では確認していない。この記事を書いている自分の手元で、実際に悪意あるファイル名を含むリポジトリを用意して旧バージョンでの脆弱性を再現する検証も行っていない。resolve_revisionについても、実際に自分の環境でオフラインモードのフォールバック挙動を確認する検証は行っていない。

関連記事: Hugging Face 使い方 / 生成AIのセキュリティリスク──企業が押さえるべき6つの脅威と対策 / ファインチューニング やり方・費用・いつ使うべきか【2026年入門】

感想・指摘はコメント欄へ。

シェア: ポスト はてブ

出典・参照資料

AIニュースの解説を動画でも

YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。

コメント

まだコメントはありません。最初のコメントを書いてみませんか?

AIについて聞きたいことはありますか?

質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。

質問箱を見る →

新しい記事をメールで受け取る

AIの新しい発表を、出典付きで整理して届けます。

関連記事

OpenAI、自社モデルによるHugging Face侵入を自ら公表──主犯は未公開モデル、5ヶ月の予言書と迫るオープンウェイトの記事画像
業界07.22読了21

OpenAI、自社モデルによるHugging Face侵入を自ら公表──主犯は未公開モデル、5ヶ月の予言書と迫るオープンウェイト

出典 ─ OpenAI公式ブログ: OpenAI an
huggingface_hub v1.26.0──revision解決を1回に集約するresolve_revisionと、UNCパスでNetNTLMv2ハッシュが盗まれるCVE-2026-15717の修正の記事画像
検証09.01読了17

huggingface_hub v1.26.0──revision解決を1回に集約するresolve_revisionと、UNCパスでNetNTLMv2ハッシュが盗まれるCVE-2026-15717の修正

出典 ─ [v1.26.0] Resolve revi
GitHubにすら置かれていないコーディングエージェント「kaagum」──Guile言語・自前UIなし・ACP専用という徹底ぶりの記事画像
検証09.02読了14

GitHubにすら置かれていないコーディングエージェント「kaagum」──Guile言語・自前UIなし・ACP専用という徹底ぶり

出典 ─ kaagum: Tiny, security
1.52MBのバイナリが3.5msでコンテナを起動する──ルートレスサンドボックス「kern」をAI生成コードの実行にどう使うかの記事画像
検証09.02読了15

1.52MBのバイナリが3.5msでコンテナを起動する──ルートレスサンドボックス「kern」をAI生成コードの実行にどう使うか

出典 ─ getkern/kern
OSキーチェーンが無い環境でもMCP InspectorがOAuthの秘密を保持できるように──AES-256-GCM暗号化と「壊れたら書き込まない」設計の記事画像
検証09.02読了14

OSキーチェーンが無い環境でもMCP InspectorがOAuthの秘密を保持できるように──AES-256-GCM暗号化と「壊れたら書き込まない」設計

出典 ─ modelcontextprotocol/i
AI Skillsに「品質ゲート」を通す──NVIDIAが公開したオープンソース評価基盤SkillEvaluatorを読むの記事画像
検証09.02読了14

AI Skillsに「品質ゲート」を通す──NVIDIAが公開したオープンソース評価基盤SkillEvaluatorを読む

出典 ─ NVIDIA/SkillEvaluator
『26.1%のスキルに脆弱性』──外部Agent Skillsを入れる前に走らせるNVIDIAのセキュリティスキャナ「SkillSpector」の記事画像
検証09.02読了14

『26.1%のスキルに脆弱性』──外部Agent Skillsを入れる前に走らせるNVIDIAのセキュリティスキャナ「SkillSpector」

出典 ─ NVIDIA/SkillSpector RE
PEFTライブラリに3つの新しいLoRA派生手法──HiRA・GLoRA・BEFTを1つずつ読むの記事画像
検証09.02読了14

PEFTライブラリに3つの新しいLoRA派生手法──HiRA・GLoRA・BEFTを1つずつ読む

出典 ─ huggingface/peft v0.20