[{"data":1,"prerenderedAt":68},["ShallowReactive",2],{"i-heroicons:building-office-2":3,"i-heroicons:computer-desktop":8,"i-heroicons:cloud":10,"i-heroicons:server":12,"i-heroicons:folder":14,"i-heroicons:chart-bar":16,"i-heroicons:lock-closed":18,"i-heroicons:rectangle-stack":20,"i-heroicons:scale":22,"i-heroicons:key":24,"i-heroicons:finger-print":26,"i-heroicons:cpu-chip":28,"i-heroicons:document-text":30,"i-heroicons:shield-exclamation":32,"i-heroicons:shield-check":34,"blog-research-ja-github-npm-supply-chain-security-reform":36,"i-heroicons:user":66},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21M6.75 6.75h.75m-.75 3h.75m-.75 3h.75m3-6h.75m-.75 3h.75m-.75 3h.75M6.75 21v-3.375c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21M3 3h12m-.75 4.5H21m-3.75 3.75h.008v.008h-.008zm0 3h.008v.008h-.008zm0 3h.008v.008h-.008z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M9 17.25v1.007a3 3 0 0 1-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0 1 15 18.257V17.25m6-12V15a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 15V5.25m18 0A2.25 2.25 0 0 0 18.75 3H5.25A2.25 2.25 0 0 0 3 5.25m18 0V12a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 12V5.25\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M2.25 15a4.5 4.5 0 0 0 4.5 4.5H18a3.75 3.75 0 0 0 1.332-7.257a3 3 0 0 0-3.758-3.848a5.25 5.25 0 0 0-10.233 2.33A4.5 4.5 0 0 0 2.25 15\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008zm-3 0h.008v.008h-.008z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":17},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875zm6.75-4.5c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125zm6.75-4.5c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M6 6.878V6a2.25 2.25 0 0 1 2.25-2.25h7.5A2.25 2.25 0 0 1 18 6v.878m-12 0q.354-.126.75-.128h10.5q.396.002.75.128m-12 0A2.25 2.25 0 0 0 4.5 9v.878m13.5-3A2.25 2.25 0 0 1 19.5 9v.878m0 0a2.3 2.3 0 0 0-.75-.128H5.25q-.396.002-.75.128m15 0A2.25 2.25 0 0 1 21 12v6a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 18v-6c0-.98.626-1.813 1.5-2.122\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":23},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M12 3v17.25m0 0c-1.472 0-2.882.265-4.185.75M12 20.25c1.472 0 2.882.265 4.185.75M18.75 4.97A48 48 0 0 0 12 4.5c-2.291 0-4.545.16-6.75.47m13.5 0q1.515.215 3 .52m-3-.52l2.62 10.726c.122.499-.106 1.028-.589 1.202a6 6 0 0 1-2.031.352a6 6 0 0 1-2.031-.352c-.483-.174-.711-.703-.59-1.202zm-16.5.52q1.485-.305 3-.52m0 0l2.62 10.726c.122.499-.106 1.028-.589 1.202a6 6 0 0 1-2.031.352a6 6 0 0 1-2.031-.352c-.483-.174-.711-.703-.59-1.202z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":25},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M15.75 5.25a3 3 0 0 1 3 3m3 0a6 6 0 0 1-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1 1 21.75 8.25\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":27},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M7.864 4.243A7.5 7.5 0 0 1 19.5 10.5c0 2.92-.556 5.709-1.568 8.269M5.742 6.364A7.47 7.47 0 0 0 4.5 10.5a7.46 7.46 0 0 1-1.15 3.993m1.989 3.559A11.2 11.2 0 0 0 8.25 10.5a3.75 3.75 0 1 1 7.5 0q0 .79-.064 1.565M12 10.5a14.94 14.94 0 0 1-3.6 9.75m6.633-4.596a18.7 18.7 0 0 1-2.485 5.33\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":29},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M8.25 3v1.5M4.5 8.25H3m18 0h-1.5M4.5 12H3m18 0h-1.5m-15 3.75H3m18 0h-1.5M8.25 19.5V21M12 3v1.5m0 15V21m3.75-18v1.5m0 15V21m-9-1.5h10.5a2.25 2.25 0 0 0 2.25-2.25V6.75a2.25 2.25 0 0 0-2.25-2.25H6.75A2.25 2.25 0 0 0 4.5 6.75v10.5a2.25 2.25 0 0 0 2.25 2.25m.75-12h9v9h-9z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":31},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":33},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M12 9v3.75m0-10.036A11.96 11.96 0 0 1 3.598 6A12 12 0 0 0 3 9.75c0 5.592 3.824 10.29 9 11.622c5.176-1.332 9-6.03 9-11.622c0-1.31-.21-2.57-.598-3.75h-.152c-3.196 0-6.1-1.25-8.25-3.286m0 13.036h.008v.008H12z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":35},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M9 12.75L11.25 15L15 9.75m-3-7.036A11.96 11.96 0 0 1 3.598 6A12 12 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623c5.176-1.332 9-6.03 9-11.622c0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285\"\u002F>",{"id":37,"documentId":38,"title":39,"content":40,"slug":41,"published":42,"authorManual":43,"createdAt":44,"updatedAt":45,"publishedAt":46,"locale":47,"tags":48,"seo":62,"author":53},95,"z2slmvsingsm1i6b66xiu1j8","基盤の強化：GitHubによるnpmサプライチェーンセキュリティ抜本改革の詳細分析","\u003Ch3>\u003Cstrong>エグゼクティブサマリー\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>2025年9月に発生した一連のサプライチェーン攻撃、特に自己増殖型ワーム「Shai-Hulud」は、npmエコシステムの認証および公開ワークフローにおける体系的な弱点を露呈させ、JavaScriptサプライチェーン全体の完全性を脅かす事態となりました 1。これらの攻撃は、GitHubによるnpmエコシステムのセキュリティ基盤を根本的に見直す直接的なきっかけとなりました。\u003C\u002Fp>\n\u003Cp>これに対しGitHubは、アカウント乗っ取り、トークン窃取、悪意のあるパッケージの注入に対してnpmレジストリを事前対策的に強化するため、3つの柱からなる戦略を発表しました。この戦略は、フィッシング耐性のある二要素認証（2FA）の義務化、有効期間の長いトークンを廃止し短命な粒度の細かいトークンへの移行、そしてTrusted Publishingを介したトークンレスCI\u002FCD認証の推進から構成されています 1。\u003C\u002Fp>\n\u003Cp>この対応は、発見後に悪意のあるパッケージを削除するといった事後対応的なインシデント対応から、すべての発行者に対するベースラインセキュリティを引き上げる事前対策的な多層防御モデルへの重要なパラダイムシフトを意味します 2。これは、OpenSSF（Open Source Security Foundation）などの組織が推進する、エコシステム横断的な新たなセキュリティ標準にnpmを整合させる動きでもあります 5。\u003C\u002Fp>\n\u003Cp>これらの変更は、すべてのnpmメンテナーと組織に対してワークフローの更新を要求します。GitHubは混乱を最小限に抑えるための段階的な展開を約束していますが 6、積極的な採用が不可欠です。本レポートでは、これらの対策を詳細に分析し、この移行を乗り切るための戦略的ガイドを提供します。\u003C\u002Fp>\n\u003Ch2>\u003Cstrong>セクション1：変革の触媒：2025年npmサプライチェーン攻撃の解剖\u003C\u002Fstrong>\u003C\u002Fh2>\n\u003Cp>本セクションでは、GitHubによる抜本的な変更の背景にある重要な文脈を提供するため、それを必要とさせた攻撃の性質とメカニズムを分析します。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>1.1 「Shai-Hulud」ワーム：自己増殖する新種の脅威\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>一連の攻撃の中でも、「Shai-Hulud」と名付けられたワームは、その巧妙な自己増殖メカニズムにより、npmエコシステムに前例のない脅威をもたらしました。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>初期ベクトル：人的要因\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>攻撃チェーンは一貫して、人気のあるnpmパッケージのメンテナーを標的としたフィッシングキャンペーンから始まりました 8。攻撃者は、公式のnpmセキュリティアラートを装ったメールなどのソーシャルエンジニアリング手法を用い、開発者を偽のログインページに誘導して認証情報を入力させることで、アカウントへのアクセス権を奪取しました 8。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>増殖メカニズム：ワーム\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>従来の攻撃とは異なり、Shai-Huludは自己増殖型のワームでした 1。その悪意のあるペイロードの中核は、実行されると侵害された環境内で追加のnpmトークンをスキャンする\u003C\u002Fp>\n\u003Cp>post-installスクリプトでした 12。トークンが発見されると、それを利用して、侵害されたメンテナーがアクセス権を持つ他のパッケージに悪意のあるコードを自動的に注入し、汚染された新しいバージョンを公開しました。これにより、さらなる人間の介入なしにレジストリ全体に自己を拡散させることが可能でした 12。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>ペイロード：高度な機密情報収集\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>このマルウェアの能力は、単にnpmトークンを盗むだけにとどまりませんでした。オープンソースのシークレットスキャンツールであるTruffleHogを積極的に展開し、被害者のファイルシステムをスキャンして、GitHub Personal Access Token（PAT）やAWS、GCP、AzureなどのクラウドサービスのAPIキーを含む、広範な機密情報を収集しました 12。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>データ漏洩と影響\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>収集された機密情報は、webhook.siteエンドポイントへのPOSTや、最も大胆な手口として、被害者のアカウント下に「Shai-Hulud」という名前の公開GitHubリポジトリを作成し、盗んだデータをダンプするなど、複数のチャネルを通じて漏洩されました 12。このワームはまた、プライベートリポジトリを公開状態にしようと試みました 12。この攻撃により、GitHubとコミュニティによって封じ込められるまでに500以上のパッケージが侵害されました 3。\u003C\u002Fp>\n\u003Cp>このShai-Hulud攻撃は、npmレジストリの相互接続性を逆手に取った戦略的な転換点でした。自己増殖する性質は、たった一人の侵害されたメンテナーがエコシステム全体に連鎖的な障害を引き起こす可能性があることを示し、脅威モデルを個別のインシデントから体系的なリスクへと根本的に変化させました。従来の攻撃は線形的でしたが、Shai-Huludは再帰的なループを導入し、指数関数的な拡散の可能性を生み出しました。GitHubのXavier René-Corail氏が指摘したように、これは「無限の攻撃の流れを可能にした可能性」がありました 1。これにより、脅威は単なるコンテンツの問題（一部のパッケージに悪意のあるコードが含まれていること）から、インフラの完全性の問題（レジストリ自体が指数関数的な攻撃拡散の媒介となること）へと昇格しました。したがって、GitHubの対応も同様に体系的である必要がありました。マルウェアスキャンを改善するだけでは不十分であり、この増殖サイクルを根源で断ち切るために、中核となる認証と公開のメカニズムを再設計する必要があったのです。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>1.2 先行インシデントと体系的な脆弱性\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>Shai-Huludの出現以前にも、npmエコシステムは同様の攻撃ベクトルを利用した深刻なインシデントを経験しており、これが後の大規模な侵害の土壌となりました。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>暗号資産窃取キャンペーン\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>Shai-Huludに先立ち、2025年9月初旬には、chalk、debug、ansi-stylesといった、合わせて週に26億回以上ダウンロードされる基盤的なパッケージを標的とした大規模な攻撃が発生しました 10。この攻撃の悪意のあるペイロードは、ブラウザ環境に自身を注入し、暗号資産の取引を傍受して宛先アドレスを攻撃者が管理するウォレットに書き換える、洗練された「ウォレットドレイナー」でした 9。この攻撃もまた、一人のメンテナーに対するフィッシングキャンペーンの成功に端を発しています 10。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>post-installスクリプトの悪用\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>これらの攻撃に共通するテーマは、npmのpost-installスクリプト機能の悪用です 3。この機能は、正当なセットアップタスクのために設計されていますが、パッケージのインストール時に任意のコードを実行できるため、マルウェア配布のための強力で広く悪用されるベクトルとなっています 9。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>長命トークンの内在的リスク\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>これらの攻撃は、有効期間が長く、広範な権限を持つ「クラシック」npmトークンの極めて高い危険性を浮き彫りにしました。一度トークンが盗まれると、手動で失効されるまで永続的で強力なアクセスを提供し、攻撃者に損害を与える十分な時間を与えていました 22。これらのトークンがCI\u002FCD環境にシークレットとして保存されていることが多かったため、漏洩の主要な標的となっていました 22。\u003C\u002Fp>\n\u003Ch2>\u003Cstrong>セクション2：GitHubの新セキュリティフレームワークの解体：多層防御\u003C\u002Fstrong>\u003C\u002Fh2>\n\u003Cp>本セクションでは、GitHubの新しいセキュリティモデルの3つの柱について技術的な詳細を掘り下げ、各コンポーネントが最近の攻撃で露呈した特定の脆弱性にどのように対処するかを分析します。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>特徴\u003C\u002Ftd>\n\u003Ctd>レガシーモデル（旧方式）\u003C\u002Ftd>\n\u003Ctd>強化モデル（新方式）\u003C\u002Ftd>\n\u003Ctd>主要なセキュリティ改善点\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>2FA方式\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>TOTP（時間ベースのワンタイムパスワード）。フィッシングに対して脆弱。\u003C\u002Ftd>\n\u003Ctd>FIDO\u002FWebAuthnベースの2FAを推奨・義務化。\u003C\u002Ftd>\n\u003Ctd>フィッシング耐性があり、中間者攻撃を根本的に防ぐ。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>ローカル公開\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>2FAのバイパスが可能だった。\u003C\u002Ftd>\n\u003Ctd>2FAが必須となり、バイパスオプションは削除。\u003C\u002Ftd>\n\u003Ctd>メンテナーの対話的な公開操作のセキュリティを強制的に強化。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>CI\u002FCDトークン\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>「クラシック」または「オートメーション」トークン。長命で広範な権限を持つ。\u003C\u002Ftd>\n\u003Ctd>粒度の細かいアクセストークン（Granular Access Token）。発行権限を持つトークンは7日間で失効。\u003C\u002Ftd>\n\u003Ctd>侵害されたトークンの影響範囲と有効期間を劇的に縮小し、永続的なアクセスのリスクを軽減。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>CI\u002FCD認証\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>長命トークンをCI\u002FCDのシークレットとして保存。\u003C\u002Ftd>\n\u003Ctd>Trusted Publishing（OIDC）。トークンレス認証。\u003C\u002Ftd>\n\u003Ctd>CI\u002FCD環境から永続的なシークレットを排除し、トークン窃取の主要な攻撃ベクトルを無効化。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>\u003Cstrong>2.1 第1の柱：フィッシング耐性のある2FAによる発行者アイデンティティの強化\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>GitHubは、TOTP（Time-based One-Time Password）ベースの2FAを廃止し、公開アクションに対してより強力なFIDOベースの2FA（WebAuthn経由）の使用を義務付けます 1。ローカルでのパッケージ公開時に2FAをバイパスするオプションは完全に削除されます 1。\u003C\u002Fp>\n\u003Cp>この変更の技術的な根拠は、両者のフィッシング耐性の違いにあります。TOTPは2FAがないよりは優れていますが、フィッシングに対して脆弱です。攻撃者は本物そっくりの偽ログインページを作成し、ユーザー名、パスワード、そして6桁のTOTPコードをリアルタイムで本物のサイトに中継することで、セッションクッキーを奪い、アクセス権を得ることができます 25。これは最近の攻撃で主要なベクトルとなりました。一方、FIDOベースの認証はフィッシング耐性があります。認証プロセスはクレデンシャルをオリジン（ウェブサイトのドメイン）に結びつけます。ユーザーが騙されたとしても、ハードウェアキーや生体認証センサーは偽のドメインでの認証を拒否します。これにより、フィッシング攻撃の連鎖を根本的な暗号レベルで断ち切ることができます 6。\u003C\u002Fp>\n\u003Cp>これは長期的なトレンドの加速です。GitHubは2022年初頭に上位100のnpmパッケージのメンテナーに2FAを義務付け始め 27、徐々に要件を拡大してきました 28。最近の攻撃は、最も強力な形式の2FAを義務付け、より脆弱な方法を廃止する動機となりました。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>2.2 第2の柱：粒度の細かい短命トークンによるトークン侵害リスクの軽減\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>レガシーな「クラシック」トークンは廃止されます 1。パッケージの公開には粒度の細かいアクセストークン（Granular Access Token）の使用が必須となり、決定的に重要な点として、公開権限を持つトークンは最大7日間の有効期間に制限されます 1。さらに、デフォルトでトークンによる公開アクセスは無効化され、ユーザーはより安全な代替手段へと誘導されます 1。\u003C\u002Fp>\n\u003Cp>クラシックな「オートメーション」または「パブリッシュ」トークンは大きな負債でした。一度作成されるとローテーションされることはほとんどなく、ユーザーのアカウントと同等の権限を持ち、ユーザーがアクセスできるすべてのパッケージに公開可能でした 31。侵害されたクラシックトークン一つが「マスターキー」となり得たのです 23。\u003C\u002Fp>\n\u003Cp>これに対し、粒度の細かいアクセストークンは、最小権限の原則を可能にします。特定のパッケージやスコープに限定したり、読み取り専用または読み書き権限に制限したり、IPアドレス範囲でアクセスを制限したりすることができます 23。\u003C\u002Fp>\n\u003Cp>そして、7日間の有効期限という新しい制御が最もインパクトがあります。たとえ公開権限を持つ粒度の細かいトークンが盗まれたとしても、攻撃者にとっての有用性は最大1週間に限定されます。これにより、悪用の機会が劇的に減少し、自動化ワークフローに定期的なトークンローテーションというセキュリティのベストプラクティスを組み込むことが強制されます 1。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>2.3 第3の柱：Trusted Publishingによるトークンレス認証へのパラダイムシフト\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>GitHubは現在、Trusted Publishingの採用を強く推奨しています。これは、OpenID Connect（OIDC）を使用してCI\u002FCDワークフローをnpmレジストリで直接認証し、長命トークンの必要性を完全に排除するメカニズムです 1。\u003C\u002Fp>\n\u003Cp>OIDCの仕組みは以下の通りです：\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>設定\u003C\u002Fstrong>：メンテナーはnpmjs.comで信頼関係を設定し、特定のGitHub組織、リポジトリ、ワークフローファイル（例：publish.yml）が特定のパッケージを公開することを承認します 22。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>CI\u002FCD実行\u003C\u002Fstrong>：信頼されたGitHub Actionsワークフローが実行されると、GitHubから短命のOIDC IDトークンを要求します。このトークンは、ワークフローのコンテキスト（リポジトリ名、コミットSHAなど）に関するクレームを含む暗号署名付きJWTです 22。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>トークン交換\u003C\u002Fstrong>：npm publishコマンドがこのOIDCトークンをnpmレジストリに送信します。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>検証\u003C\u002Fstrong>：npmはJWTの署名を検証し、そのクレームを事前に設定された信頼ポリシーと照合します。一致すれば、npmは非常に短命で一度しか使えないAPIトークンをワークフローランナーに返します 33。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>公開\u003C\u002Fstrong>：ランナーはこの一時的なAPIトークンを使用してパッケージをアップロードします。このトークンは直後に失効し、後で使用するために漏洩させることはできず、シークレットとして保存されることもありません 1。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>この方法の重要な利点は、公開されたパッケージに自動的に**来歴証明（provenance attestation）**が含まれることです 1。これにより、消費者はパッケージのソースリポジトリと使用された特定のビルドプロセスに関する暗号的な証明を得ることができ、サプライチェーンの透明性と信頼性が向上します 1。\u003C\u002Fp>\n\u003Cp>ただし、現時点ではいくつかの制限と課題があります。当初はGitHub Actions（ホストランナーのみ）とGitLab CI\u002FCD（共有ランナー）をサポートしています 22。他のプロバイダーやセルフホストランナーのサポートは計画されていますがまだ利用できず、これは多くの組織にとって大きな障壁となります 22。また、Trusted Publishingを設定するにはパッケージがnpm上に既に存在している必要があり、新しいパッケージにとっては「鶏が先か卵が先か」の問題を生じさせています。このため、設定を有効にするためだけにプレースホルダーパッケージを公開するコミュニティツールが登場しています 38。\u003C\u002Fp>\n\u003Cp>GitHubのフレームワークは、攻撃者のライフサイクル全体に対抗するために戦略的に制御を階層化する、多層防御の優れた実践例です。このセキュリティモデルは、単一のもろいシークレット（クラシックトークン）に依存するのではなく、アイデンティティ、クレデンシャル、公開プロセスのすべてが独立して強化される多面的なシステムへと移行します。このアプローチは、どの単一の制御も失敗する可能性があるという前提に基づいています。第1層として、フィッシングによって開発者が標的にされた場合、FIDO\u002FWebAuthnが最初の防衛線となり、初期のアカウント侵害を防ぎます。第2層として、攻撃者がトークンを盗むことに成功した場合でも、トークンの7日間の有効期限と粒度の細かいスコープが次の防衛線となります。損害は時間と範囲の両方で封じ込められます。そして最も堅牢な第3層として、Trusted PublishingがCI\u002FCD環境から静的で盗難可能なトークンを完全に排除します。CI環境を侵害した攻撃者は、漏洩させるべき長命のシークレットを見つけることができません。この階層的なアプローチは、攻撃チェーンの複数のポイントでの失敗に耐えることができる回復力のあるシステムを構築する、成熟したセキュリティ体制を示しています。\u003C\u002Fp>\n\u003Ch2>\u003Cstrong>セクション3：比較分析：広範なエコシステムにおけるnpmのセキュリティ体制\u003C\u002Fstrong>\u003C\u002Fh2>\n\u003Cp>本セクションでは、npmの新しいセキュリティモデルを他の主要なパッケージリポジトリと比較し、その相対的な成熟度とサプライチェーンセキュリティにおける業界全体のトレンドに関する文脈を提供します。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>セキュリティ機能\u003C\u002Ftd>\n\u003Ctd>npm（強化後）\u003C\u002Ftd>\n\u003Ctd>PyPI\u003C\u002Ftd>\n\u003Ctd>Maven Central\u003C\u002Ftd>\n\u003Ctd>RubyGems\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>必須2FA\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>はい、公開アクションに対して\u003C\u002Ftd>\n\u003Ctd>はい、全ユーザー\u003C\u002Ftd>\n\u003Ctd>いいえ（発行者検証に依存）\u003C\u002Ftd>\n\u003Ctd>いいえ（推奨）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>フィッシング耐性2FA\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>はい、FIDO\u002FWebAuthnを推奨\u003C\u002Ftd>\n\u003Ctd>はい、WebAuthnをサポート\u003C\u002Ftd>\n\u003Ctd>該当なし\u003C\u002Ftd>\n\u003Ctd>はい、WebAuthnをサポート\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>トークンスコープ\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>はい、Granular Token\u003C\u002Ftd>\n\u003Ctd>はい、スコープ付きトークン\u003C\u002Ftd>\n\u003Ctd>該当なし\u003C\u002Ftd>\n\u003Ctd>はい、スコープ付きAPIキー\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>トークン有効期限\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>はい（発行権限は7日間）\u003C\u002Ftd>\n\u003Ctd>はい、設定可能\u003C\u002Ftd>\n\u003Ctd>該当なし\u003C\u002Ftd>\n\u003Ctd>はい、設定可能\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Trusted Publishing (OIDC)\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>はい\u003C\u002Ftd>\n\u003Ctd>はい（業界の先駆者）\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003Ctd>はい\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>アーティファクト署名\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>いいえ（計画中）\u003C\u002Ftd>\n\u003Ctd>はい、PGP（オプション）\u003C\u002Ftd>\n\u003Ctd>はい、PGP（必須）\u003C\u002Ftd>\n\u003Ctd>はい、暗号署名\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>来歴証明\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>はい（Trusted Publishing経由）\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>ID\u002F名前空間の検証\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003Ctd>はい（groupIdのドメイン検証）\u003C\u002Ftd>\n\u003Ctd>いいえ\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>\u003Cstrong>3.1 PyPIからの教訓：現代の公開セキュリティの先駆者\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>PyPIは、2023年4月に主要なレジストリとして初めてTrusted Publishingを導入しました 3。その成功した展開と14,000以上のプロジェクトによる自発的な採用は、トークンレス公開が実行可能であり、メンテナーに望まれていることを示す、業界全体にとって重要な概念実証となりました 41。npmはここでPyPIの戦略に直接従っています。\u003C\u002Fp>\n\u003Cp>また、PyPIは2024年1月1日に全ユーザーに対する必須2FAの展開を完了しました 43。これは2022年にクリティカルなプロジェクトから始まった複数年にわたる取り組みでした 44。このプロセスは、追加の負担を懸念する開発者からの初期の反発に直面しましたが 44、最終的にはエコシステムを保護するために必要なステップと見なされました 45。npmのアプローチは、PyPIの段階的な展開から学んでいるように見えます。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>3.2 Maven Centralモデル：ガバナンスと信頼における対比\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>Maven Centralのセキュリティモデルは根本的に異なり、より厳格な事前検証に基づいています。公開するには、プロジェクトは通常、発行者が所有権を証明する必要があるドメイン名に紐づけられた一意のgroupId（例：org.springframework）を所有しなければなりません 48。これは強力で検証済みの名前空間として機能し、npmやPyPIで一般的なタイポスクワッティングやIDの混乱を防ぎます。\u003C\u002Fp>\n\u003Cp>また、GPGによるアーティファクトの署名は、Centralに公開する多くのプロジェクトにとって長年のベストプラクティスであり、要件でもあります。これにより、消費者はアーティファクトが正当な所有者によって公開されてから改ざんされていないことを確認できます 49。さらに、一度リリースバージョンのアーティファクトがMaven Centralに公開されると、それは不変です。上書きしたり削除したりすることはできません 49。これにより、アカウントを侵害した攻撃者が人気のある既存のバージョンを悪意のあるものに置き換えることを防ぎます。\u003C\u002Fp>\n\u003Cp>このゲートキーパー型の高摩擦モデルは強力な保証を提供しますが、JavaScriptエコシステムの特徴である公開の速度と容易さを犠牲にします。Mavenのセキュリティモデルは検証済みの発行者を信頼することを前提としていますが、npmの新しいモデルは、あらゆる発行者の\u003Cem>行動\u003C\u002Fem>を保護することに焦点を当てています 48。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>3.3 npmの新たな軌道評価\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>GitHubの新しい措置は大きな前進であり、npmのセキュリティ体制をPyPIのような同業者と同等、そして一部の領域（TOTPよりもFIDOを義務付ける点など）ではそれを上回るものにしています。Trusted Publishingへの積極的な推進は、CI\u002FCDセキュリティに関する業界全体の標準への収束を示しています 36。\u003C\u002Fp>\n\u003Cp>しかし、Mavenと比較すると、npmには依然として、事前のID検証とアーティファクト署名のための堅牢で必須のメカニズムが欠けています。来歴証明はソースへのリンクを提供しますが、悪意のある者が適切に来歴証明された悪意のある新しいパッケージを公開することを防ぐものではありません。エコシステムが多数の小規模な単一メンテナーのパッケージに依存していることは、これらの新しい措置が軽減するものの、排除はできない構造的なリスクとして残っています 52。\u003C\u002Fp>\n\u003Cp>パッケージレジストリのセキュリティの進化は、「発行者の保護」と「プロセスの保護」という2つの競合する哲学を明らかにしています。Maven Centralは前者、つまり厳格な事前のID審査に焦点を当てています。一方、PyPI、そして今やnpmは後者を支持しており、よりオープンな公開モデルを受け入れつつ、認証と自動化の経路を積極的に強化しています。業界は、高速度のオープンソースエコシステムにとってよりスケーラブルなモデルとして、「プロセスの保護」に収束しつつあります。Mavenのモデルは、より構造化された企業主導のオープンソースの時代に設計されましたが、npmやPyPIのようなエコシステムの爆発的な成長は、その低摩擦モデルによって促進されました。これらのエコシステムにMavenスタイルの審査プロセスを後付けすることは文化的に不可能であり、エコシステムを破壊するでしょう。したがって、現実的な解決策は、\u003Cem>誰が\u003C\u002Fem>公開できるかを変えるのではなく、\u003Cem>どのように\u003C\u002Fem>公開するかを劇的に保護することでした。フィッシング耐性のある2FAやOIDCベースのTrusted Publishingのような技術は、この哲学に完璧に適合します。これらは、中央機関がすべての発行者のIDを審査する必要はありませんが、プラットフォームが公開\u003Cem>行為\u003C\u002Fem>自体に強力で検証可能なセキュリティ慣行を強制することを可能にします。\u003C\u002Fp>\n\u003Ch2>\u003Cstrong>セクション4：戦略的実装とセキュア開発のための推奨事項\u003C\u002Fstrong>\u003C\u002Fh2>\n\u003Cp>本セクションでは、ここまでの分析を開発チームのための実行可能なガイダンスに変換し、移行のためのロードマップを提供し、高度な防御態勢の概要を示します。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>4.1 開発者と組織のための段階的移行ガイド\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>GitHubの新しいセキュリティ要件への移行は、計画的かつ段階的に進めることが重要です。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>即時対応（最初の48時間）\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\u003Cstrong>クレデンシャルのローテーションと監査\u003C\u002Fstrong>：CI\u002FCDで使用されている長命のクラシックトークンを含む、既存のすべてのnpmトークンを直ちに失効させ、ローテーションします 8。npmjs.comの「Access Tokens」ページを監査し、未使用または過剰な権限を持つトークンを特定して削除します。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>フィッシング耐性2FAの有効化\u003C\u002Fstrong>：公開権限を持つすべての開発者は、npmおよびGitHubアカウントで直ちに2FAを設定し、TOTPアプリよりもWebAuthn（ハードウェアキー、生体認証）を優先します 3。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>公開アクセスのレビュー\u003C\u002Fstrong>：各パッケージについて、Settings -&gt; Publishing accessに移動し、「Require two-factor authentication...」を選択して、すべての協力者に2FAを強制します 54。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>\u003Cstrong>短期移行（次の30日間）：Trusted Publishingの採用\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Col>\n\u003Cli>\u003Cp>\u003Cstrong>候補ワークフローの特定\u003C\u002Fstrong>：現在サポートされているGitHub ActionsまたはGitLab CI経由で公開されている公開パッケージを優先します 22。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>段階的設定（GitHub Actionsの例）\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>新規プロジェクトの場合は、プレースホルダーパッケージを公開します 38。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>npmjs.comで、パッケージのアクセス設定に移動し、「Trusted Publisher」を追加して、GitHubのユーザー\u002F組織、リポジトリ、ワークフローファイル名（例：release.yml）を指定します 22。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>GitHub Actionsのワークフローファイルから、NPM_TOKENシークレットを使用するステップを削除します。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>ジョブにpermissionsブロックを追加します：permissions: id-token: write 22。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>npm publishコマンドが十分に新しいバージョンのnpm（&gt;= 11.5.1）で実行されることを確認します 35。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp>\u003Cstrong>公開のロックダウン\u003C\u002Fstrong>：Trusted Publishingが機能することを確認したら、パッケージの設定に戻り、「Require two-factor authentication and \u003Cstrong>disallow tokens\u003C\u002Fstrong>」を選択します 22。これにより、OIDCが自動公開の\u003C\u002Fp>\n\u003Cp>\u003Cem>唯一\u003C\u002Fem>の方法となり、最大限のセキュリティが提供されます。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>\u003Cstrong>エッジケースと制限への対応\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>セルフホストランナー\u003C\u002Fstrong>：セルフホストランナーを使用するワークフローでは、Trusted Publishingはまだ利用できません 22。ベストプラクティスは、可能な限り狭いパッケージスコープと、CIシステムの最も安全なシークレット管理機能に保存された、自動ローテーションされる短い有効期限を持つ粒度の細かいアクセストークンを使用することです。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>プライベートパッケージのインストール\u003C\u002Fstrong>：Trusted Publishingはnpm publishのみを対象とします。CIワークフロー内でプライベートパッケージをnpm installするには、別途読み取り専用の粒度の細かいアクセストークンが依然として必要です 22。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>フェーズ\u003C\u002Ftd>\n\u003Ctd>タスク\u003C\u002Ftd>\n\u003Ctd>責任者\u003C\u002Ftd>\n\u003Ctd>ステータス\u003C\u002Ftd>\n\u003Ctd>メモ\u002F参照\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>即時\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>すべてのクラシックnpmトークンを監査し、失効させる\u003C\u002Ftd>\n\u003Ctd>組織管理者、メンテナー\u003C\u002Ftd>\n\u003Ctd>☐ 未着手\u003C\u002Ftd>\n\u003Ctd>CI\u002FCDパイプラインと開発者環境をチェック\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>即時\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>すべての発行者にWebAuthn 2FAを強制する\u003C\u002Ftd>\n\u003Ctd>組織管理者、メンテナー\u003C\u002Ftd>\n\u003Ctd>☐ 未着手\u003C\u002Ftd>\n\u003Ctd>TOTPよりもWebAuthnを優先する\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>短期\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>my-packageのrelease.ymlワークフローをTrusted Publishingに移行する\u003C\u002Ftd>\n\u003Ctd>メンテナー\u003C\u002Ftd>\n\u003Ctd>☐ 未着手\u003C\u002Ftd>\n\u003Ctd>OIDC設定とワークフローの更新が必要\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>短期\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Trusted Publishing移行後、パッケージ設定で「トークンを不許可」に設定する\u003C\u002Ftd>\n\u003Ctd>メンテナー\u003C\u002Ftd>\n\u003Ctd>☐ 未着手\u003C\u002Ftd>\n\u003Ctd>最大限のセキュリティを確保するための最終ステップ\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>長期\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>新規プロジェクトでnpmからpnpmへの移行を評価する\u003C\u002Ftd>\n\u003Ctd>開発チーム\u003C\u002Ftd>\n\u003Ctd>☐ 未着手\u003C\u002Ftd>\n\u003Ctd>post-installスクリプトのリスクを軽減\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>長期\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>CIパイプラインにビルド環境のサンドボックス化を導入する\u003C\u002Ftd>\n\u003Ctd>DevOps\u002FSREチーム\u003C\u002Ftd>\n\u003Ctd>☐ 未着手\u003C\u002Ftd>\n\u003Ctd>bubblewrapなどのツールを検討\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3>\u003Cstrong>4.2 GitHubの義務化を超える高度な防御戦略\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>GitHubが導入した新しいセキュリティベースラインは強力ですが、さらに堅牢なサプライチェーンセキュリティ体制を構築するためには、組織レベルでの追加的な防御策を講じることが推奨されます。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>pnpmによるコード実行の制御\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>悪意のあるpost-installスクリプトの脅威を無力化する最も効果的な方法の一つは、デフォルトでそれらを実行しないパッケージマネージャーを使用することです。pnpmは「デフォルトで拒否」の原則に基づいて動作し、すべてのpost-installスクリプトをスキップし、開発者が必要不可欠なものだけを明示的にホワイトリストに登録することを強制します 55。この変更だけで、Shai-Huludワームや他の多くのnpmマルウェアキャンペーンの主要な感染ベクトルを無効化できます。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>ビルド環境のサンドボックス化\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>さらに強力な防御として、開発およびCI環境をサンドボックス化することが挙げられます。Linuxのbubblewrapのようなツールは、npm installやpnpm installが実行されるための隔離された環境を作成し、ネットワーク、ホームディレクトリ（SSH\u002FAWSキーを含む）、その他の機密性の高いファイルシステムへのアクセスを拒否します。これにより、悪意のあるスクリプトが実行されたとしても、それを封じ込め、機密情報の窃取やデータ漏洩を防ぐことができます 55。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>「依存関係のクールダウン」期間の導入\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Cp>ゼロデイの悪意のある公開から防御するために、組織は依存関係の最新バージョンを即座に採用しないポリシーを導入することができます。内部プロキシリポジトリやRenovateのminimumReleaseAge設定などのツールを通じて、遅延（例：7〜14日間）を強制することで、チームは広範なコミュニティやセキュリティ研究者が悪意のあるパッケージを発見し報告するための時間を確保し、それが自社のビルドプロセスに入る前に対応できます 14。\u003C\u002Fp>\n\u003Cp>効果的なサプライチェーンセキュリティは、単一のツールやポリシーではなく、オープンソースエコシステムへの「暗黙の信頼」モデルから「明示的な検証と封じ込め」モデルへの文化的な転換です。GitHubの変更はこの転換の強力な触媒ですが、最終的な回復力は、組織が階層的な防御策をどれだけ採用するかにかかっています。従来の開発ワークフローはnpmレジストリとパッケージを暗黙的に信頼していましたが、最近の攻撃はこの信頼を打ち砕きました。GitHubの新しいルールは、FIDOが\u003Cem>人物\u003C\u002Fem>を、Trusted Publishingが\u003Cem>プロセス\u003C\u002Fem>を、来歴証明が\u003Cem>起源\u003C\u002Fem>を検証するという、明示的な検証への移行を強制します。しかし、これらのプラットフォームレベルの制御には限界があり、悪意があるが正しく公開されたパッケージを止めることはできません。したがって、最も成熟した組織は、pnpm（スクリプト実行の封じ込め）やサンドボックス化（ファイルシステム\u002Fネットワークアクセスの封じ込め）の背後にある「侵害を前提とする」という考え方、つまり封じ込めへと次のステップに進む必要があります。\u003C\u002Fp>\n\u003Ch3>\u003Cstrong>4.3 サプライチェーンセキュリティの未来への備え\u003C\u002Fstrong>\u003C\u002Fh3>\n\u003Cp>Shai-Huludワームは、攻撃者が単純なクレデンシャル窃取から、自律的で自己増殖する脅威の作成へと、より洗練されていることを示しています 57。将来の攻撃は、より高度な難読化 1、ビルドツールやCI設定へのより直接的な標的化、そしてAIを利用した説得力のあるフィッシングの誘引や悪意のあるコードのバリエーション生成などを組み込む可能性が高いでしょう。\u003C\u002Fp>\n\u003Cp>業界全体のTrusted Publishingと来歴証明への推進は第一歩です。次のフロンティアは、ビルドプロセスのより堅牢なランタイム監視、検証可能で再現可能なビルド、そしてコンプライアンスの成果物としてだけでなく、脅威の監視と対応のためのアクティブなセキュリティツールとしてのソフトウェア部品表（SBOM）の採用となるでしょう 59。\u003C\u002Fp>\n\u003Ch2>\u003Cstrong>結論\u003C\u002Fstrong>\u003C\u002Fh2>\n\u003Cp>GitHubによる包括的なセキュリティ強化は、単なる漸進的な改善ではなく、サプライチェーン攻撃の高度化に対する必要不可欠かつ決定的な対応です。これらは、npmエコシステムの基盤を根本的に強化するものです。\u003C\u002Fp>\n\u003Cp>GitHubはプラットフォームのセキュリティベースラインを引き上げていますが、共同責任の原則は依然として最重要です。ソフトウェアサプライチェーンの最終的なセキュリティは、メンテナーと組織がこれらの新しいツールを積極的に採用し、セキュリティを意識した慣行を日々のワークフローに統合することにかかっています。\u003C\u002Fp>\n\u003Cp>この移行には努力が必要ですが、2025年9月の攻撃が示したような混乱とコストのかかる修復作業という、何もしないことの代償ははるかに大きいものです 2。FIDOベースの2FA、粒度の細かいトークン、そして特にTrusted Publishingの積極的な採用は、今やJavaScriptエコシステムにおけるプロフェッショナルなソフトウェア開発の不可欠な側面となっています。\u003C\u002Fp>\n\u003Ch4>\u003Cstrong>引用文献\u003C\u002Fstrong>\u003C\u002Fh4>\n\u003Col>\n\u003Cli>GitHub Mandates 2FA and Short-Lived Tokens to Strengthen npm ..., 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fthehackernews.com\u002F2025\u002F09\u002Fgithub-mandates-2fa-and-short-lived.html\">https:\u002F\u002Fthehackernews.com\u002F2025\u002F09\u002Fgithub-mandates-2fa-and-short-lived.html\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub tightens npm security with mandatory 2FA, access tokens, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fgithub-tightens-npm-security-with-mandatory-2fa-access-tokens\u002F\">https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fgithub-tightens-npm-security-with-mandatory-2fa-access-tokens\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub Introduces npm Security with Stronger Authentication and Trusted Publishing, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgbhackers.com\u002Fgithub-introduces-npm-security-with-stronger-authentication\u002F\">https:\u002F\u002Fgbhackers.com\u002Fgithub-introduces-npm-security-with-stronger-authentication\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub Enhances npm Security with Mandatory 2FA and Access Tokens - SSOJet, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fssojet.com\u002Fnews\u002Fgithub-enhances-npm-security-with-mandatory-2fa-and-access-tokens\">https:\u002F\u002Fssojet.com\u002Fnews\u002Fgithub-enhances-npm-security-with-mandatory-2fa-and-access-tokens\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Our plan for a more secure npm supply chain - The GitHub Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fsecurity\u002Fsupply-chain-security\u002Four-plan-for-a-more-secure-npm-supply-chain\u002F\">https:\u002F\u002Fgithub.blog\u002Fsecurity\u002Fsupply-chain-security\u002Four-plan-for-a-more-secure-npm-supply-chain\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub is finally tightening up security around npm following multiple attacks - TechRadar, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.techradar.com\u002Fpro\u002Fsecurity\u002Fgithub-is-finally-tightening-up-security-around-npm-following-multiple-attacks\">https:\u002F\u002Fwww.techradar.com\u002Fpro\u002Fsecurity\u002Fgithub-is-finally-tightening-up-security-around-npm-following-multiple-attacks\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub Boosting Security in Response to NPM Supply Chain Attacks ..., 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.securityweek.com\u002Fgithub-boosting-security-in-response-to-npm-supply-chain-attacks\u002F\">https:\u002F\u002Fwww.securityweek.com\u002Fgithub-boosting-security-in-response-to-npm-supply-chain-attacks\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>What We Know About the NPM Supply Chain Attack | Trend Micro (US), 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.trendmicro.com\u002Fen_us\u002Fresearch\u002F25\u002Fi\u002Fnpm-supply-chain-attack.html\">https:\u002F\u002Fwww.trendmicro.com\u002Fen_us\u002Fresearch\u002F25\u002Fi\u002Fnpm-supply-chain-attack.html\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Largest npm Supply-Chain Attack to Date Targets Billions of Downloads - Sweet Security, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.sweet.security\u002Fblog\u002Flargest-npm-supply-chain-attack-to-date-targets-billions-of-downloads\">https:\u002F\u002Fwww.sweet.security\u002Fblog\u002Flargest-npm-supply-chain-attack-to-date-targets-billions-of-downloads\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Breakdown: Widespread npm Supply Chain Attack Puts Billions of Weekly Downloads at Risk - Palo Alto Networks Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.paloaltonetworks.com\u002Fblog\u002Fcloud-security\u002Fnpm-supply-chain-attack\u002F\">https:\u002F\u002Fwww.paloaltonetworks.com\u002Fblog\u002Fcloud-security\u002Fnpm-supply-chain-attack\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>19 npm Packages Compromised in Major Supply-Chain Attack | OX Security, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.ox.security\u002Fblog\u002Fnpm-packages-compromised\u002F\">https:\u002F\u002Fwww.ox.security\u002Fblog\u002Fnpm-packages-compromised\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Shai-Hulud npm Supply Chain Attack | Wiz Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.wiz.io\u002Fblog\u002Fshai-hulud-npm-supply-chain-attack\">https:\u002F\u002Fwww.wiz.io\u002Fblog\u002Fshai-hulud-npm-supply-chain-attack\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Widespread Supply Chain Compromise Impacting npm Ecosystem - CISA, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.cisa.gov\u002Fnews-events\u002Falerts\u002F2025\u002F09\u002F23\u002Fwidespread-supply-chain-compromise-impacting-npm-ecosystem\">https:\u002F\u002Fwww.cisa.gov\u002Fnews-events\u002Falerts\u002F2025\u002F09\u002F23\u002Fwidespread-supply-chain-compromise-impacting-npm-ecosystem\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Security Advisory | NPM Packages Using Secret Scanning Tools to Steal Credentials, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fsemgrep.dev\u002Fblog\u002F2025\u002Fsecurity-advisory-npm-packages-using-secret-scanning-tools-to-steal-credentials\u002F\">https:\u002F\u002Fsemgrep.dev\u002Fblog\u002F2025\u002Fsecurity-advisory-npm-packages-using-secret-scanning-tools-to-steal-credentials\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>500+ npm Packages Compromised in Ongoing Supply Chain Attack &#39;Shai-Hulud&#39; - Truesec, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.truesec.com\u002Fhub\u002Fblog\u002F500-npm-packages-compromised-in-ongoing-supply-chain-attack-shai-hulud\">https:\u002F\u002Fwww.truesec.com\u002Fhub\u002Fblog\u002F500-npm-packages-compromised-in-ongoing-supply-chain-attack-shai-hulud\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>180+ NPM Packages Hit in Major Supply Chain Attack - OX Security, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.ox.security\u002Fblog\u002Fnpm-2-0-hack-40-npm-packages-hit-in-major-supply-chain-attack\u002F\">https:\u002F\u002Fwww.ox.security\u002Fblog\u002Fnpm-2-0-hack-40-npm-packages-hit-in-major-supply-chain-attack\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub Boosting Security in Response to NPM Supply Chain Attacks - SecurityWeek, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.securityweek.com\u002Fgithub-boosting-security-in-response-to-npm-supply-chain-attacks\u002Famp\u002F\">https:\u002F\u002Fwww.securityweek.com\u002Fgithub-boosting-security-in-response-to-npm-supply-chain-attacks\u002Famp\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>When Dependencies Turn Dangerous: Responding to the NPM Supply Chain Attack, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fblog.qualys.com\u002Fvulnerabilities-threat-research\u002F2025\u002F09\u002F10\u002Fwhen-dependencies-turn-dangerous-responding-to-the-npm-supply-chain-attack\">https:\u002F\u002Fblog.qualys.com\u002Fvulnerabilities-threat-research\u002F2025\u002F09\u002F10\u002Fwhen-dependencies-turn-dangerous-responding-to-the-npm-supply-chain-attack\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Major NPM Supply-Chain Attack: Potential Impact on Mobile Applications - NowSecure, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.nowsecure.com\u002Fblog\u002F2025\u002F09\u002F08\u002Fmajor-npm-supply-chain-attack-potential-impact-on-mobile-applications\u002F\">https:\u002F\u002Fwww.nowsecure.com\u002Fblog\u002F2025\u002F09\u002F08\u002Fmajor-npm-supply-chain-attack-potential-impact-on-mobile-applications\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>npm Chalk and Debug Packages Hit in Software Supply Chain Attack - Sonatype, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.sonatype.com\u002Fblog\u002Fnpm-chalk-and-debug-packages-hit-in-software-supply-chain-attack\">https:\u002F\u002Fwww.sonatype.com\u002Fblog\u002Fnpm-chalk-and-debug-packages-hit-in-software-supply-chain-attack\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Wormable Malware Triggers GitHub&#39;s Push for Stronger npm Security | eSecurity Planet, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.esecurityplanet.com\u002Fnews\u002Fwormable-malware-triggers-githubs-push-for-stronger-npm-security\u002F\">https:\u002F\u002Fwww.esecurityplanet.com\u002Fnews\u002Fwormable-malware-triggers-githubs-push-for-stronger-npm-security\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Trusted publishing for npm packages, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fdocs.npmjs.com\u002Ftrusted-publishers\u002F\">https:\u002F\u002Fdocs.npmjs.com\u002Ftrusted-publishers\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>New npm features for secure publishing and safe consumption - The GitHub Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fnews-insights\u002Fproduct-news\u002Fnew-npm-features-for-secure-publishing-and-safe-consumption\u002F\">https:\u002F\u002Fgithub.blog\u002Fnews-insights\u002Fproduct-news\u002Fnew-npm-features-for-secure-publishing-and-safe-consumption\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub Tightens Npm Security with Mandatory 2fa - ITdaily., 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fitdaily.com\u002Fnews\u002Fsoftware\u002Fgithub-npm-2fa\u002F\">https:\u002F\u002Fitdaily.com\u002Fnews\u002Fsoftware\u002Fgithub-npm-2fa\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>a second attack has hit npm, over 40 packages compromised. : r\u002Fjavascript - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fjavascript\u002Fcomments\u002F1nifp98\u002Fa_second_attack_has_hit_npm_over_40_packages\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fjavascript\u002Fcomments\u002F1nifp98\u002Fa_second_attack_has_hit_npm_over_40_packages\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Largest NPM Compromise in History - Supply Chain Attack : r\u002Fcybersecurity - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fcybersecurity\u002Fcomments\u002F1nbqs7c\u002Flargest_npm_compromise_in_history_supply_chain\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fcybersecurity\u002Fcomments\u002F1nbqs7c\u002Flargest_npm_compromise_in_history_supply_chain\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Top-100 npm package maintainers now require 2FA, and additional security-focused improvements to npm - The GitHub Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fsecurity\u002Fsupply-chain-security\u002Ftop-100-npm-package-maintainers-require-2fa-additional-security\u002F\">https:\u002F\u002Fgithub.blog\u002Fsecurity\u002Fsupply-chain-security\u002Ftop-100-npm-package-maintainers-require-2fa-additional-security\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>npm is making 2FA mandatory for accounts with high impact packages : r\u002Fnode - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fnode\u002Fcomments\u002Fxftu7i\u002Fnpm_is_making_2fa_mandatory_for_accounts_with\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fnode\u002Fcomments\u002Fxftu7i\u002Fnpm_is_making_2fa_mandatory_for_accounts_with\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>npm: Enforcing 2FA for high-impact projects · Issue \u003Ca href=\"https:\u002F\u002Fwww.yubion.com\u002Fblog\u002Fhashtags\u002F464\">#464\u003C\u002Fa> · github\u002Froadmap, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgithub\u002Froadmap\u002Fissues\u002F464\">https:\u002F\u002Fgithub.com\u002Fgithub\u002Froadmap\u002Fissues\u002F464\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>After Shai-Hulud, GitHub tightens npm publishing security, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.helpnetsecurity.com\u002F2025\u002F09\u002F23\u002Fnpm-publishing-security-improvements\u002F\">https:\u002F\u002Fwww.helpnetsecurity.com\u002F2025\u002F09\u002F23\u002Fnpm-publishing-security-improvements\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>About access tokens - npm Docs, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fdocs.npmjs.com\u002Fabout-access-tokens\u002F\">https:\u002F\u002Fdocs.npmjs.com\u002Fabout-access-tokens\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>General availability of granular access token on npm - GitHub Changelog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fchangelog\u002F2023-03-20-general-availability-of-granular-access-token-on-npm\u002F\">https:\u002F\u002Fgithub.blog\u002Fchangelog\u002F2023-03-20-general-availability-of-granular-access-token-on-npm\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Trusted Publishers for All Package Repositories - wg-securing-software-repos, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Frepos.openssf.org\u002Ftrusted-publishers-for-all-package-repositories.html\">https:\u002F\u002Frepos.openssf.org\u002Ftrusted-publishers-for-all-package-repositories.html\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Trusted publishing: a new benchmark for packaging security - The Trail of Bits Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fblog.trailofbits.com\u002F2023\u002F05\u002F23\u002Ftrusted-publishing-a-new-benchmark-for-packaging-security\u002F\">https:\u002F\u002Fblog.trailofbits.com\u002F2023\u002F05\u002F23\u002Ftrusted-publishing-a-new-benchmark-for-packaging-security\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>npm trusted publishing with OIDC is generally available - GitHub Changelog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fchangelog\u002F2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available\u002F\">https:\u002F\u002Fgithub.blog\u002Fchangelog\u002F2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>npm Adopts OIDC for Trusted Publishing in CI\u002FCD Workflows - ... - \u003Ca href=\"http:\u002F\u002FSocket.dev\">Socket.dev\u003C\u002Fa>, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fsocket.dev\u002Fblog\u002Fnpm-trusted-publishing\">https:\u002F\u002Fsocket.dev\u002Fblog\u002Fnpm-trusted-publishing\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub to remove weak security options for npm registry - The Register, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.theregister.com\u002F2025\u002F09\u002F23\u002Fgithub_npm_registry_security\u002F\">https:\u002F\u002Fwww.theregister.com\u002F2025\u002F09\u002F23\u002Fgithub_npm_registry_security\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Setup npm package for trusted publishing with OIDC - GitHub, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fazu\u002Fsetup-npm-trusted-publish\">https:\u002F\u002Fgithub.com\u002Fazu\u002Fsetup-npm-trusted-publish\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub Boosts npm Security with Stronger Authentication and Trusted Publishing, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fcyberpress.org\u002Fgithub-boosts-npm-security\u002F\">https:\u002F\u002Fcyberpress.org\u002Fgithub-boosts-npm-security\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Introducing &#39;Trusted Publishers&#39; - The Python Package Index Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fblog.pypi.org\u002Fposts\u002F2023-04-20-introducing-trusted-publishers\u002F\">https:\u002F\u002Fblog.pypi.org\u002Fposts\u002F2023-04-20-introducing-trusted-publishers\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Adoption of Trusted Publishers Growing Among Open Source Package Repositories, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fsocket.dev\u002Fblog\u002Fadoption-of-trusted-publishers-growing-among-open-source-package-repositories\">https:\u002F\u002Fsocket.dev\u002Fblog\u002Fadoption-of-trusted-publishers-growing-among-open-source-package-repositories\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>New Guide for Package Repositories to Adopt Trusted Publishers - Open Source Security Foundation, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fopenssf.org\u002Fblog\u002F2024\u002F08\u002F05\u002Fnew-guide-for-package-repositories-to-adopt-trusted-publishers\u002F\">https:\u002F\u002Fopenssf.org\u002Fblog\u002F2024\u002F08\u002F05\u002Fnew-guide-for-package-repositories-to-adopt-trusted-publishers\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>2FA Required for PyPI - The Python Package Index Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fblog.pypi.org\u002Fposts\u002F2024-01-01-2fa-enforced\u002F\">https:\u002F\u002Fblog.pypi.org\u002Fposts\u002F2024-01-01-2fa-enforced\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>PyPI mandates 2FA for critical projects, developer pushes back - Bleeping Computer, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fpypi-mandates-2fa-for-critical-projects-developer-pushes-back\u002F\">https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fpypi-mandates-2fa-for-critical-projects-developer-pushes-back\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>PyPI to mandate 2FA by the end of 2023 - Cybersecurity Dive, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.cybersecuritydive.com\u002Fnews\u002Fpypi-mandate-2fa-authentication\u002F651520\u002F\">https:\u002F\u002Fwww.cybersecuritydive.com\u002Fnews\u002Fpypi-mandate-2fa-authentication\u002F651520\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>PyPI Implements Mandatory 2FA for Enhanced Security in Software Publishing, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fblog.excellimatrix.com\u002Fpost\u002Fpypi-implements-mandatory-2fa-for-enhanced-security-in-software-publishing\">https:\u002F\u002Fblog.excellimatrix.com\u002Fpost\u002Fpypi-implements-mandatory-2fa-for-enhanced-security-in-software-publishing\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>After malicious uploads, PyPi requires multi-factor authentication - IT Brew, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.itbrew.com\u002Fstories\u002F2023\u002F06\u002F29\u002Fafter-malicious-uploads-pypi-makes-multi-factor-a-must\">https:\u002F\u002Fwww.itbrew.com\u002Fstories\u002F2023\u002F06\u002F29\u002Fafter-malicious-uploads-pypi-makes-multi-factor-a-must\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Attacks on Maven proxy repositories - The GitHub Blog, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fgithub.blog\u002Fsecurity\u002Fvulnerability-research\u002Fattacks-on-maven-proxy-repositories\u002F\">https:\u002F\u002Fgithub.blog\u002Fsecurity\u002Fvulnerability-research\u002Fattacks-on-maven-proxy-repositories\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Why or how is Maven more secure\u002Freliable than NPM? : r\u002Fjava - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fjava\u002Fcomments\u002Fqdq2qh\u002Fwhy_or_how_is_maven_more_securereliable_than_npm\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fjava\u002Fcomments\u002Fqdq2qh\u002Fwhy_or_how_is_maven_more_securereliable_than_npm\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Introducing MavenGate: a supply chain attack method for Java and Android applications, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fblog.oversecured.com\u002FIntroducing-MavenGate-a-supply-chain-attack-method-for-Java-and-Android-applications\u002F\">https:\u002F\u002Fblog.oversecured.com\u002FIntroducing-MavenGate-a-supply-chain-attack-method-for-Java-and-Android-applications\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Maven Security, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fmaven.apache.org\u002Fsecurity.html\">https:\u002F\u002Fmaven.apache.org\u002Fsecurity.html\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>npm got owned because one dev clicked the wrong link. billions of downloads poisoned. supply chain security is still held together with duct tape. : r\u002Fsysadmin - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fsysadmin\u002Fcomments\u002F1ncf87f\u002Fnpm_got_owned_because_one_dev_clicked_the_wrong\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fsysadmin\u002Fcomments\u002F1ncf87f\u002Fnpm_got_owned_because_one_dev_clicked_the_wrong\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[AskJS] what makes NPM less secure than other package providers? : r\u002Fjavascript - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fjavascript\u002Fcomments\u002F1nkw6gr\u002Faskjs_what_makes_npm_less_secure_than_other\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fjavascript\u002Fcomments\u002F1nkw6gr\u002Faskjs_what_makes_npm_less_secure_than_other\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Requiring 2FA for package publishing and settings modification - npm Docs, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fdocs.npmjs.com\u002Frequiring-2fa-for-package-publishing-and-settings-modification\u002F\">https:\u002F\u002Fdocs.npmjs.com\u002Frequiring-2fa-for-package-publishing-and-settings-modification\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>How to Prevent NPM Supply Chain Attacks Now | by Tahir | Sep, 2025 - Medium, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@tahirbalarabe2\u002Fhow-to-prevent-npm-supply-chain-attacks-now-bbdb539a7729\">https:\u002F\u002Fmedium.com\u002F@tahirbalarabe2\u002Fhow-to-prevent-npm-supply-chain-attacks-now-bbdb539a7729\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>NPM packages .. How are you securing against dodgy packages and compromised developer accounts ? : r\u002Fcybersecurity - Reddit, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fcybersecurity\u002Fcomments\u002F1nk4rpc\u002Fnpm_packages_how_are_you_securing_against_dodgy\u002F\">https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fcybersecurity\u002Fcomments\u002F1nk4rpc\u002Fnpm_packages_how_are_you_securing_against_dodgy\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Ongoing npm Software Supply Chain Attack Exposes New Risks - Sonatype, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fwww.sonatype.com\u002Fblog\u002Fongoing-npm-software-supply-chain-attack-exposes-new-risks\">https:\u002F\u002Fwww.sonatype.com\u002Fblog\u002Fongoing-npm-software-supply-chain-attack-exposes-new-risks\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>PYPI Security: How to Prevent Supply Chain Attacks in Python Projects - Bolster AI, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fbolster.ai\u002Fblog\u002Fpypi-supply-chain-attacks\">https:\u002F\u002Fbolster.ai\u002Fblog\u002Fpypi-supply-chain-attacks\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>GitHub security features, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fgetting-started\u002Fgithub-security-features\">https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fgetting-started\u002Fgithub-security-features\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>safety - PyPI, 9月 26, 2025にアクセス、 \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fsafety\u002F\">https:\u002F\u002Fpypi.org\u002Fproject\u002Fsafety\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n","github-npm-supply-chain-security-reform","2025-09-26","インシデント・リサーチチーム","2026-04-28T09:29:02.554Z","2026-05-11T04:13:47.446Z","2026-05-11T04:45:56.049Z","ja",[49,56],{"id":50,"documentId":51,"name":52,"slug":53,"createdAt":54,"updatedAt":54,"publishedAt":55},8,"jp15t1lmikoj9lzf4jg7x5or","サイバー攻撃",null,"2026-04-28T00:13:56.930Z","2026-04-28T00:13:58.787Z",{"id":57,"documentId":58,"name":59,"slug":53,"createdAt":60,"updatedAt":60,"publishedAt":61},10,"jtjsveh2njt8av8obqgoyouo","サイバーインシデント","2026-04-28T00:14:04.261Z","2026-04-28T00:14:06.092Z",[63],{"id":64,"metaDescription":65},634,"GitHubがnpmサプライチェーン攻撃を受け、セキュリティ基盤を抜本改革。フィッシング耐性2FAや短期トークンなど3つの柱を詳細に分析し、開発者が取るべき対策を解説します。",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":67},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M15.75 6a3.75 3.75 0 1 1-7.5 0a3.75 3.75 0 0 1 7.5 0M4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.9 17.9 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632\"\u002F>",1783406328393]