<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pnpm on 思いつきそうで思いつかなくていたときに</title><link>https://blog.fuga.jp/tags/pnpm/</link><description>Recent content in Pnpm on 思いつきそうで思いつかなくていたときに</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><copyright>Copyright(c) 2022-2025 SATO Daisuke. All rights reserved.</copyright><lastBuildDate>Fri, 21 Aug 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://blog.fuga.jp/tags/pnpm/index.xml" rel="self" type="application/rss+xml"/><item><title>9年物の時限爆弾から pnpm の大改造まで — 今日は「作り直し」が5つ重なった日（2026/8/21 Linux・OSSトレンド）</title><link>https://blog.fuga.jp/posts/2026-08-21-linux-oss-trend/</link><pubDate>Fri, 21 Aug 2026 00:00:00 +0900</pubDate><guid>https://blog.fuga.jp/posts/2026-08-21-linux-oss-trend/</guid><description>&lt;h2 id="はじめに"&gt;&lt;a href="#%e3%81%af%e3%81%98%e3%82%81%e3%81%ab" class="header-anchor"&gt;&lt;/a&gt;はじめに
&lt;/h2&gt;&lt;p&gt;古い設計をそのまま延命させるか、思い切って捨てて作り直すか。今日並べた5本は、その決断が重なった一日の記録です。9年前のコミットに眠っていた欠陥がようやく塞がれ、9年前に決めた API 設計そのものが段階的に廃止されようとしている一方で、あるパッケージマネージャは実装言語を丸ごと Rust に置き換えるという荒療治に踏み切りました。&lt;/p&gt;
&lt;p&gt;面白いのは、その「作り直し」の粒度がまるで揃っていないことです。関数ひとつの所有権管理を直せば済むものもあれば、カーネルの API をひとつ丸ごと畳もうとしているものもあり、言語ごと乗り換えたものもある。直さず作り直す、という選択が、セキュリティと開発者ツールの両方で同時に起きた日です。&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
 &lt;iframe loading="lazy" 
 src="https://www.youtube.com/embed/zrUTGuySAS4" 
 allowfullscreen 
 title="YouTube Video"
 &gt;
 &lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id="1-vpn-の鍵交換サービスに-double-free--cve-2026-33824連邦機関の修正期限は本日"&gt;&lt;a href="#1-vpn-%e3%81%ae%e9%8d%b5%e4%ba%a4%e6%8f%9b%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%81%ab-double-free--cve-2026-33824%e9%80%a3%e9%82%a6%e6%a9%9f%e9%96%a2%e3%81%ae%e4%bf%ae%e6%ad%a3%e6%9c%9f%e9%99%90%e3%81%af%e6%9c%ac%e6%97%a5" class="header-anchor"&gt;&lt;/a&gt;1. VPN の鍵交換サービスに Double Free — CVE-2026-33824、連邦機関の修正期限は本日
&lt;/h2&gt;&lt;p&gt;まずはいちばん重い話から。Windows の IKE（Internet Key Exchange）サービス拡張に存在する二重解放（Double Free）の脆弱性、CVE-2026-33824 が &lt;a class="link" href="https://www.cisa.gov/news-events/alerts/2026/08/18/cisa-adds-four-known-exploited-vulnerabilities-catalog" target="_blank" rel="noopener"
 &gt;CISA の既知悪用済み脆弱性（KEV）カタログ&lt;/a&gt;へ 2026年8月18日付で追加されました。連邦行政機関への修正期限は BOD 26-04 の適用によりまさに本日、2026年8月21日に設定されています。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://nvd.nist.gov/vuln/detail/CVE-2026-33824" target="_blank" rel="noopener"
 &gt;NVD のエントリ&lt;/a&gt;に載っている評価は、次のような並びです。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;項目&lt;/th&gt;
					&lt;th&gt;値&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CVSS v3.1 基本スコア&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;9.8（Critical）&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;攻撃元区分（Attack Vector）&lt;/td&gt;
					&lt;td&gt;ネットワーク&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;攻撃条件の複雑さ（Attack Complexity）&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;必要な権限（Privileges Required）&lt;/td&gt;
					&lt;td&gt;なし&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ユーザー関与（User Interaction）&lt;/td&gt;
					&lt;td&gt;不要&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;スコープ&lt;/td&gt;
					&lt;td&gt;変更なし&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;機密性 / 完全性 / 可用性への影響&lt;/td&gt;
					&lt;td&gt;高 / 高 / 高&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;脆弱性タイプ&lt;/td&gt;
					&lt;td&gt;CWE-415（Double Free）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;上から下まで、条件がいちばん緩い側に振り切っています。ネットワークから届きさえすれば、認証もユーザーの操作も要らずにコードが動く、という構成です。&lt;/p&gt;
&lt;p&gt;脆弱なのは IKE and AuthIP IPsec Keying Modules サービス（IKEEXT）、VPN や IPsec ポリシーが有効な Windows で既定稼働している基盤サービスです。原因は IKEv2 のフラグメント再組み立て処理にあります。&lt;code&gt;IkeHandleSecurityRealmVendorId()&lt;/code&gt; がヒープ確保したポインタを構造体のオフセット &lt;code&gt;0x208&lt;/code&gt; に格納したあと、&lt;code&gt;IkeReinjectReassembledPacket()&lt;/code&gt; によるシャローコピーで同じポインタがオフセット &lt;code&gt;0xC8&lt;/code&gt; にもエイリアス（同一アドレスへの別参照）として残ってしまう。さらに &lt;code&gt;IkeQueueRecvRequest()&lt;/code&gt; がその構造体をヒープ上の作業アイテムへもう一度浅くコピーするため、同じアドレスを指す参照が複数の場所にばらまかれた状態になります。そのままクリーンアップ処理に入ると、&lt;code&gt;IkeDestroyPacketContext()&lt;/code&gt; と &lt;code&gt;IkeFreeMMSA()&lt;/code&gt; が独立に同じ領域を解放してしまい、Double Free が完成します。&lt;/p&gt;
&lt;p&gt;コピーそのものは高速化のための素直な実装です。ただ「このポインタを最後に解放するのは誰か」という取り決めだけが、コピーの回数ぶん曖昧になっていきました。&lt;/p&gt;
&lt;p&gt;攻撃者からすれば、必要なのはパケット2本だけです。まず Microsoft Security Realm Vendor ID を含む &lt;code&gt;IKE_SA_INIT&lt;/code&gt; メッセージを送り、続いて不正な &lt;code&gt;IKE_AUTH&lt;/code&gt; メッセージを内包した暗号化フラグメント（SKF）ペイロードを2個以上含む断片化パケットを送る。これが UDP 500（IKE）または UDP 4500（NAT-T IKE）に到達すれば、認証なしで SYSTEM 権限でのコード実行が成立します。&lt;/p&gt;
&lt;p&gt;対象は広く、NVD が挙げているのは Windows 10（1607・1809・21H2・22H2）、Windows 11（22H3・23H2・24H2・25H2・26H1）、そして Windows Server 2016 以降のサーバー系すべて。要するに、現在サポート中の Windows はひととおり含まれると考えたほうが早い範囲です。&lt;/p&gt;
&lt;p&gt;ワーム化のしやすさについては、&lt;a class="link" href="https://www.zerodayinitiative.com/blog/2026/4/22/cve-2026-33824-remote-code-execution-in-windows-ikev2" target="_blank" rel="noopener"
 &gt;ZDI の技術解析ブログ&lt;/a&gt;にも評価が載っていますが、この記事では NVD の SSVC（Stakeholder-Specific Vulnerability Categorization）の確定値だけを根拠にします。&lt;code&gt;automatable: yes&lt;/code&gt;（攻撃の自動化が可能）、&lt;code&gt;technicalImpact: total&lt;/code&gt;（技術的影響は完全）という評価と、ネットワーク越し・未認証・ユーザー操作不要という CVSS 9.8 の構成そのものが、拡散のしやすさを物語っています。構造としては、2017年に WannaCry を引き起こした MS17-010（EternalBlue）と似た輪郭を持ちます。認証不要のネットワーク越し RCE という点は共通していて、狙われる窓口が SMB のポート 445 ではなく IKE の UDP 500/4500 である、という違いです。VPN の待ち受けはインターネットに向けて開けておくのが前提の機能なので、公開面という意味ではむしろ広いかもしれません。実際、GitHub 上には公開 PoC が複数確認されています。&lt;/p&gt;
&lt;p&gt;そして、これが机上の心配で済んでいないことを示す観測もあります。&lt;a class="link" href="https://unit42.paloaltonetworks.com/autonomous-ai-cyber-attack-campaign/" target="_blank" rel="noopener"
 &gt;Palo Alto Networks Unit 42 の調査&lt;/a&gt;では、中国系とされる脅威アクター「knaithe」（別名 KnYuan、珠海拠点）の存在が報告されています。このアクターは DeepSeek の Hermes Agent を中核に据えた自律型攻撃基盤を構築し、FOFA サーチエンジンによる列挙とカスタム Python スキャナーを組み合わせて 460 拠点以上を標的選定していたとのことです。同レポートには CVE-2026-33824 も名指しで登場し、3件の IKE VPN エンドポイントを標的としたリバースシェルの接続試行が確認された、と分類されています。侵入に至ったという記述ではありませんが、少なくともこの CVE は、いま実地で試されている番号です。修正期限が本日という事実と並べると、締切の重みが少し違って見えてきます。&lt;/p&gt;
&lt;p&gt;標的スキャンからエクスプロイトの生成・検証までを AI が半自律で担うという、2026年らしい攻撃キャンペーンの姿がここに現れています。人手で1件ずつ調べていた偵察が自動化されると、「うちみたいな小さいところは後回しだろう」という前提が効かなくなる、というのがこの手の話のいちばん怖いところです。&lt;/p&gt;
&lt;p&gt;対応の最優先は 2026年4月14日に配信された累積セキュリティ更新プログラム（4月の月例更新）の適用です。すぐに当てられない場合の暫定策としては、次のあたりが挙げられます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# VPN や IPsec ポリシーを使っていない環境なら、IKEEXT 自体を止めてしまう&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sc stop IKEEXT
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sc config IKEEXT &lt;span style="color:#00d3d0"&gt;start&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; disabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;あわせて、境界ファイアウォールで UDP 500/4500 のインバウンドをブロックする、IPsec が届く ACL / NSG を洗い直す、といった手当ても有効です。ただしこれらはあくまで一時しのぎで、恒久的な対策はパッチ適用にあります。VPN を止められない環境では、結局そこに戻ってきます。&lt;/p&gt;
&lt;h2 id="2-go-127-リリース--ポスト量子署名がついに標準ライブラリへ"&gt;&lt;a href="#2-go-127-%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9--%e3%83%9d%e3%82%b9%e3%83%88%e9%87%8f%e5%ad%90%e7%bd%b2%e5%90%8d%e3%81%8c%e3%81%a4%e3%81%84%e3%81%ab%e6%a8%99%e6%ba%96%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%81%b8" class="header-anchor"&gt;&lt;/a&gt;2. Go 1.27 リリース — ポスト量子署名がついに標準ライブラリへ
&lt;/h2&gt;&lt;p&gt;続いては、少し前向きな話です。2026年8月19日、&lt;a class="link" href="https://go.dev/blog/go1.27" target="_blank" rel="noopener"
 &gt;Go 1.27 が正式リリース&lt;/a&gt;されました。柱は3つあります。&lt;/p&gt;
&lt;p&gt;ひとつめは、FIPS 204 準拠のポスト量子署名アルゴリズムを実装する新パッケージ &lt;a class="link" href="https://pkg.go.dev/crypto/mldsa" target="_blank" rel="noopener"
 &gt;&lt;code&gt;crypto/mldsa&lt;/code&gt;&lt;/a&gt; の追加です。ML-DSA（Module-Lattice-Based Digital Signature Algorithm）は NIST が 2024年に標準化した格子暗号ベースの署名方式で、量子コンピュータ上の Shor アルゴリズムに耐性を持ちます。強度に応じて3つの変種が用意されています。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;変種&lt;/th&gt;
					&lt;th&gt;公開鍵サイズ&lt;/th&gt;
					&lt;th&gt;署名サイズ&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;MLDSA44&lt;/td&gt;
					&lt;td&gt;1312 バイト&lt;/td&gt;
					&lt;td&gt;2420 バイト&lt;/td&gt;
					&lt;td&gt;一般用途（推奨）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MLDSA65&lt;/td&gt;
					&lt;td&gt;1952 バイト&lt;/td&gt;
					&lt;td&gt;3309 バイト&lt;/td&gt;
					&lt;td&gt;高強度&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MLDSA87&lt;/td&gt;
					&lt;td&gt;2592 バイト&lt;/td&gt;
					&lt;td&gt;4627 バイト&lt;/td&gt;
					&lt;td&gt;最高強度&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;これらは &lt;code&gt;crypto/x509&lt;/code&gt; と &lt;code&gt;crypto/tls&lt;/code&gt; に統合され、TLS 1.3 のハンドシェイクで利用可能になりました。Go 1.26 で先に ML-KEM（鍵交換、FIPS 203）が入っていたので、今回の ML-DSA（署名）が加わったことで「鍵交換 ＋ 署名」の両方がポスト量子対応になったことになります。背景にあるのは、今日の TLS 通信を録音しておいて将来の量子コンピュータで復号する「Harvest Now, Decrypt Later」への懸念です。壊れるのは10年後かもしれませんが、盗まれるのは今日である、という理屈で動いている話です。&lt;/p&gt;
&lt;p&gt;利用にあたっては注意点があります。既存の TLS 設定を変えなければ従来の ECDSA/RSA が使われ続けるオプトイン方式で、切り替えるには &lt;code&gt;crypto/tls&lt;/code&gt; で ML-DSA の &lt;code&gt;SignatureScheme&lt;/code&gt; 値（MLDSA44/65/87）を明示する必要があります。鍵交換用の &lt;code&gt;Config.CurvePreferences&lt;/code&gt; は署名の設定経路ではないので、間違えないようにしたいところです。&lt;/p&gt;
&lt;p&gt;サイズにも目を配っておきたいところです。MLDSA44 の公開鍵はおよそ 1312 バイトで、RSA-2048 の公開鍵（294 バイト）の約4.5倍。署名は 2420 バイトで、RSA 署名の約10倍にあたります。サーバー同士の通信ならほぼ誤差ですが、細い回線の先にいるモバイルや IoT デバイスでは、ハンドシェイク1回あたりの往復量として効いてくる可能性があります。&lt;/p&gt;
&lt;p&gt;ふたつめは「ジェネリックメソッド（Generic Methods）」の解禁です。Go 1.18 でのジェネリクス導入から4年越しの機能追加で、これまで型パラメータを持てるのはパッケージレベルの関数か型そのものだけでした。その結果、型ごとに同じようなメソッドを並べるボイラープレートが定番になっていました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;// Go 1.26 まで：整数型ごとに個別のメソッドが必要だった&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;func&lt;/span&gt; (r &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt;Rand) &lt;span style="color:#feacd0"&gt;Int32N&lt;/span&gt;(n &lt;span style="color:#6ae4b9"&gt;int32&lt;/span&gt;) &lt;span style="color:#6ae4b9"&gt;int32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;func&lt;/span&gt; (r &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt;Rand) &lt;span style="color:#feacd0"&gt;Int64N&lt;/span&gt;(n &lt;span style="color:#6ae4b9"&gt;int64&lt;/span&gt;) &lt;span style="color:#6ae4b9"&gt;int64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;func&lt;/span&gt; (r &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt;Rand) &lt;span style="color:#feacd0"&gt;IntN&lt;/span&gt;(n &lt;span style="color:#6ae4b9"&gt;int&lt;/span&gt;) &lt;span style="color:#6ae4b9"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;// Go 1.27：ジェネリックメソッドで一本にまとまる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;func&lt;/span&gt; (r &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt;Rand) N[Int intType](n Int) Int
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;実際に &lt;code&gt;math/rand/v2&lt;/code&gt; の &lt;code&gt;(*Rand).N&lt;/code&gt; がこの形で書き換わっています。ただし制限もあって、インターフェースのメソッド宣言には型パラメータを付けられないため、ジェネリックメソッドでインターフェースを実装することはできません。同時に関数型推論の汎用化も入り、複合リテラル・型変換・チャネル送信でジェネリック関数の型引数を省略できるようになりました。&lt;/p&gt;
&lt;p&gt;先送りされてきた理由は型推論エンジンの複雑化とインターフェースとの整合性で、Go チームは3年ほどかけて型推論と型チェッカーを強化し、今回ようやく解禁に踏み切りました。既存コードへの破壊的影響はほぼありませんが、&lt;code&gt;reflect.Value.Pointer()&lt;/code&gt; でクロージャのポインタ比較をしていたコードは、コンパイラが複数インスタンスを同一コードへマージするようになった影響で挙動が変わる可能性があります。&lt;/p&gt;
&lt;p&gt;みっつめは新 JSON エンジン &lt;a class="link" href="https://pkg.go.dev/encoding/json/v2" target="_blank" rel="noopener"
 &gt;&lt;code&gt;encoding/json/v2&lt;/code&gt;&lt;/a&gt; と &lt;code&gt;encoding/json/jsontext&lt;/code&gt; のバンドルです。構成は2層で、上位の &lt;code&gt;encoding/json/v2&lt;/code&gt; は &lt;code&gt;Marshal&lt;/code&gt; / &lt;code&gt;Unmarshal&lt;/code&gt; に可変長の &lt;code&gt;Options&lt;/code&gt; 引数を足して挙動を細かく制御できるようにしたもの。下位の &lt;code&gt;encoding/json/jsontext&lt;/code&gt; は、ステートマシンで妥当性を保証しながら低レベルのトークンや値のストリームを扱う層です。既存の &lt;code&gt;encoding/json&lt;/code&gt; は API 互換を保ったまま内部実装だけを v2 エンジンへ差し替えており、アンマーシャル速度が大きく向上しています。&lt;/p&gt;
&lt;p&gt;注意したいのはデフォルト挙動の厳格化で、不正な UTF-8 を含む文字列やオブジェクト内の重複キーはエラーになります。これまで黙って通っていた JSON が急に弾かれる可能性がある、ということです。&lt;code&gt;GOEXPERIMENT=nojsonv2&lt;/code&gt; で旧エンジンに戻すか、v2 の &lt;code&gt;Options&lt;/code&gt; で v1 相当のセマンティクスを明示すれば回避できます。&lt;/p&gt;
&lt;p&gt;地味なところでは、メモリアロケータの改善も入りました。80 バイト未満の小さなオブジェクトにサイズ特化のアロケーションを導入し、アロケーションコストを最大30%削減しています。全体では約1%と控えめですが、小さなオブジェクトを大量に作るワークロードでは効いてくるかもしれません。なお macOS の最低要件が macOS 13 Ventura に引き上げられているので、古い macOS 環境でのビルドには注意してください。&lt;/p&gt;
&lt;h2 id="3-カーネルの暗号ソケットが静かに閉じていく--fedora-45-の-af_alg-段階制限"&gt;&lt;a href="#3-%e3%82%ab%e3%83%bc%e3%83%8d%e3%83%ab%e3%81%ae%e6%9a%97%e5%8f%b7%e3%82%bd%e3%82%b1%e3%83%83%e3%83%88%e3%81%8c%e9%9d%99%e3%81%8b%e3%81%ab%e9%96%89%e3%81%98%e3%81%a6%e3%81%84%e3%81%8f--fedora-45-%e3%81%ae-af_alg-%e6%ae%b5%e9%9a%8e%e5%88%b6%e9%99%90" class="header-anchor"&gt;&lt;/a&gt;3. カーネルの暗号ソケットが静かに閉じていく — Fedora 45 の AF_ALG 段階制限
&lt;/h2&gt;&lt;p&gt;ここからは少しペースを落として、地味だけれど構造的な話をお届けします。Linux カーネルの暗号ユーザー空間 API「AF_ALG」が、CVE-2026-31431（通称 Copy Fail、CVSS 7.8 HIGH）という深刻なローカル権限昇格の温床となったことを受け、Fedora 45 が AF_ALG を既知の正規ユーザーだけに限定する「Phase 1」の Change を正式承認しました。&lt;/p&gt;
&lt;p&gt;AF_ALG は、ユーザー空間プロセスがカーネル内部の暗号アルゴリズムエンジン（&lt;code&gt;algif_aead&lt;/code&gt;、&lt;code&gt;algif_skcipher&lt;/code&gt;、&lt;code&gt;algif_hash&lt;/code&gt; など）を直接呼び出せるようにするソケット型 API です。ソケットを開いてアルゴリズム名をバインドすると、あとは普通のソケットのように読み書きするだけで暗号処理ができる、という設計になっています。導入当初の目的は、ハードウェア暗号アクセラレータの恩恵をユーザー空間へゼロコピーで橋渡しすることにありました。&lt;/p&gt;
&lt;p&gt;Copy Fail の根本原因は、2017年のコミット（&lt;code&gt;72548b093ee3&lt;/code&gt;）にさかのぼります。AEAD 復号処理で出力スキャッターリストをページキャッシュのページへ直接チェーンする最適化が、そのまま攻撃の足がかりに転用されてしまいました。攻撃の流れは次のとおりです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;socket(AF_ALG, SOCK_SEQPACKET, 0)&lt;/code&gt; で AF_ALG ソケットを開き、&lt;code&gt;authencesn(hmac(sha256),cbc(aes))&lt;/code&gt; をバインドする&lt;/li&gt;
&lt;li&gt;&lt;code&gt;splice()&lt;/code&gt; で &lt;code&gt;/usr/bin/su&lt;/code&gt; のページキャッシュのページをパイプへ流し込む&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sendmsg()&lt;/code&gt; と &lt;code&gt;recvmsg()&lt;/code&gt; の組み合わせで AEAD 復号の出力先をそのページキャッシュへ向け、AAD の4〜7バイト目から供給した4バイトの値を任意の位置に書き込む&lt;/li&gt;
&lt;li&gt;SUID バイナリのメモリ内イメージが書き換わる（ディスクには一切書き込まれない）&lt;/li&gt;
&lt;li&gt;改ざんされた &lt;code&gt;/usr/bin/su&lt;/code&gt; を実行して root シェルを取得する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不気味なのは、この一連の流れが &lt;code&gt;socket&lt;/code&gt; / &lt;code&gt;setsockopt&lt;/code&gt; / &lt;code&gt;splice&lt;/code&gt; / &lt;code&gt;sendmsg&lt;/code&gt; / &lt;code&gt;recvmsg&lt;/code&gt; という標準的なシステムコールだけで完結する点です。実装は 732 バイトの Python スクリプトに収まっており、しかも既定のカーネル設定で有効なアルゴリズムしか使いません。つまり &lt;code&gt;CONFIG&lt;/code&gt; を触っていない大半のディストリビューションが、そのままの状態で対象になります。さらにディスクには書き込まれないため、ファイル内容のチェックサム検証では捉えにくいという厄介さもあります。&lt;/p&gt;
&lt;p&gt;CISA は 2026年5月1日にこれを KEV カタログへ登録し、連邦機関への修正期限を5月15日に設定しました。影響範囲はカーネル 4.14（2017年）以降のうち、パッチ未適用のバージョンです。5.10.254・5.15.204・6.1.170・6.6.137・6.12.85・6.18.22 以上の安定版はすでに修正済みで対象外なので、まずは自分の環境がこの線を越えているかどうかを確認するのが早道です。ディストリビューション側では Ubuntu 20.04〜24.04、Amazon Linux 2023、RHEL 10.1、SUSE Linux Enterprise 16、Debian 11/12/13 などで影響が確認されています。&lt;/p&gt;
&lt;p&gt;上流の対応も着実に進んでいます。Linux 7.2 では AF_ALG の公式非推奨化が宣言され、ゼロコピーサポートとオフ CPU ハードウェアオフロード機能が削除されました。&lt;a class="link" href="https://www.phoronix.com/news/Linux-AF-ALG-Deprecation" target="_blank" rel="noopener"
 &gt;Phoronix の報道&lt;/a&gt;によれば、カーネル開発者の Eric Biggers 氏は、AF_ALG が巨大な攻撃面を露出させており、現代の脆弱性発見ツールに耐えられていない、と述べています。機能として不要になったから消すのではなく、割に合わないから消す、という判断です。&lt;/p&gt;
&lt;p&gt;続く &lt;a class="link" href="https://www.phoronix.com/news/AF-ALG-Restrict-Sysctl-Linux" target="_blank" rel="noopener"
 &gt;Linux 7.3 では、新しい sysctl &lt;code&gt;af_alg_restrict&lt;/code&gt; が導入&lt;/a&gt;され、締め方を3段階から選べるようになりました。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;値&lt;/th&gt;
					&lt;th&gt;挙動&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;無制限（従来どおり）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;非特権プロセスにはアルゴリズムのホワイトリストを適用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;完全に無効化&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;そして今回の Fedora 45 の Change は、&lt;a class="link" href="https://bugzilla.redhat.com/show_bug.cgi?id=2517963" target="_blank" rel="noopener"
 &gt;「Disable in Kernel Crypto Userspace API (Phase 1)」（バグ #2517963）&lt;/a&gt;として承認されたもので、&lt;code&gt;CRYPTO_USER_API&lt;/code&gt; を iwd や libkcapi、cryptosetup といった少数の正規パッケージだけに限定するというものです。「Phase 1」と名付けられていることから、将来的な完全無効化（Phase 2）を見据えた段階的な廃止ロードマップであることがうかがえます。&lt;/p&gt;
&lt;p&gt;ここで気になるのは巻き添えの範囲ですが、dm-crypt/LUKS・kTLS・IPsec・OpenSSL・GnuTLS・SSH といった主要な暗号実装の多くは AF_ALG に依存しておらず、影響は限定的とみられます。ディスク暗号化も HTTPS も SSH も、AF_ALG を経由せずに暗号処理を行っているためです。つまり大多数のユーザーにとって、AF_ALG の廃止は体感する機会がほぼない変更だと言えそうです。攻撃面だけが大きく、使っている人は少ない。畳むという判断が通りやすい条件がそろっています。&lt;/p&gt;
&lt;p&gt;即時の緩和策としては、&lt;code&gt;algif_aead&lt;/code&gt; がモジュールになっている環境なら、次のように無効化する方法があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# モジュールとしてビルドされている場合&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;echo&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;&amp;#39;install algif_aead /bin/false&amp;#39;&lt;/span&gt; | sudo tee /etc/modprobe.d/disable-algif.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rmmod algif_aead
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# カーネル組み込みの場合（RHEL / CloudLinux 等）は起動引数で初期化を止める&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo grubby --update-kernel&lt;span style="color:#00d3d0"&gt;=&lt;/span&gt;ALL --args&lt;span style="color:#00d3d0"&gt;=&lt;/span&gt;&lt;span style="color:#79a8ff"&gt;&amp;#34;initcall_blacklist=algif_aead_init&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;とはいえ恒久対策は、修正済みカーネル（7.0 以降、または 6.19.12 / 6.18.22 以上）へのアップデートです。Arch Linux や Debian、Ubuntu でも同様の制限措置が検討・実施されつつあり、Fedora の Change はその先頭を走っている格好になります。&lt;/p&gt;
&lt;h2 id="4-安定版カーネル-7-系統が一斉リリース--thunderbolt-と-bpf-の修正が目玉"&gt;&lt;a href="#4-%e5%ae%89%e5%ae%9a%e7%89%88%e3%82%ab%e3%83%bc%e3%83%8d%e3%83%ab-7-%e7%b3%bb%e7%b5%b1%e3%81%8c%e4%b8%80%e6%96%89%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9--thunderbolt-%e3%81%a8-bpf-%e3%81%ae%e4%bf%ae%e6%ad%a3%e3%81%8c%e7%9b%ae%e7%8e%89" class="header-anchor"&gt;&lt;/a&gt;4. 安定版カーネル 7 系統が一斉リリース — Thunderbolt と BPF の修正が目玉
&lt;/h2&gt;&lt;p&gt;2026年8月19日、Linux 安定版メンテナの Greg Kroah-Hartman（GKH）氏が &lt;a class="link" href="https://www.kernel.org/pub/linux/kernel/v7.x/ChangeLog-7.1.9" target="_blank" rel="noopener"
 &gt;7.1.9・6.18.45・6.12.104・6.6.152・6.1.183・5.15.216・5.10.265 の7系統を一斉に公開&lt;/a&gt;しました。各リリースに「重要な修正が含まれる」と告知されており、7本合計の ChangeLog 容量は約 3.7 MB にのぼります。7.1 系は今後 LTS ブランチとして 2028年12月まで継続サポートされる見込みです。&lt;/p&gt;
&lt;p&gt;技術的なハイライトはふたつあります。ひとつは Thunderbolt の境界値チェック修正で、こちらは2件入りました。&lt;/p&gt;
&lt;p&gt;1件目は帯域幅グループ予約配列の off-by-one です（コミット &lt;code&gt;0a8c9ed4f166&lt;/code&gt;）。Thunderbolt コントローラは USB4/Thunderbolt 4 のトンネリング帯域を &lt;code&gt;group_reserved[]&lt;/code&gt; という配列で管理していますが、有効なグループ ID が 1〜MAX_GROUPS であるのに対して配列は &lt;code&gt;MAX_GROUPS&lt;/code&gt; 個ぶんしか確保されていませんでした。ID が MAX_GROUPS のとき、配列の末尾を1要素ぶん超えて書き込んでしまいます。修正では配列サイズを &lt;code&gt;MAX_GROUPS + 1&lt;/code&gt; に広げました。1から数えるか0から数えるかという、古典的な取り違えです。&lt;/p&gt;
&lt;p&gt;2件目は DROM（Device ROM）のポート番号に対する境界検証の追加です（コミット &lt;code&gt;f32c3a9a77cf&lt;/code&gt;）。Thunderbolt デバイスが持つ DROM の &lt;code&gt;dual_link_port_nr&lt;/code&gt; フィールド（6ビット値）が、そのまま &lt;code&gt;sw-&amp;gt;ports[]&lt;/code&gt; 配列のインデックスとして使われていました。悪意あるデバイスが最大ポート数を超える値を書き込んでいれば、範囲外アクセスが起きます。修正では &lt;code&gt;dual_link_port_nr &amp;gt;= max_port_number&lt;/code&gt; のときに当該エントリを拒否するチェックが加わりました。要するに、挿しただけでカーネルを落とせる可能性のあった欠陥です。公共の充電ステーションや共有ドックを使う環境では、意味のある修正だと言えます。&lt;/p&gt;
&lt;p&gt;もうひとつは BPF sockmap の Use-After-Free 修正です（コミット &lt;code&gt;1cec526cf0a2&lt;/code&gt;）。&lt;code&gt;tcp_bpf_send_verdict()&lt;/code&gt; は &lt;code&gt;psock-&amp;gt;sk_redir&lt;/code&gt; にキャッシュしたリダイレクト先ソケットの参照を使いますが、ソースソケットのロックを解放したあと、別スレッドがそのキャッシュをクリアして &lt;code&gt;sock_put()&lt;/code&gt; で最終参照を落としてしまうと、最初のスレッドは解放済みのポインタを使い続けることになります。修正ではロック保持中に &lt;code&gt;sock_hold()&lt;/code&gt; で一時参照を取得し、送信完了後に &lt;code&gt;sock_put()&lt;/code&gt; で解放する実装へ変更されました。eBPF の socket redirect を活用するサービスメッシュ的な構成では、クラッシュにつながりうる不具合だったため、該当する eBPF 依存の観測・通信基盤を動かしている環境では優先的な適用をおすすめします。ChangeLog は修正内容を示すのみで緩和策の有無には触れていないため、確実な対処としては更新の適用をおすすめします。&lt;/p&gt;
&lt;p&gt;BPF まわりでは fsverity 関連も2件直りました。ダイジェスト取得時にバッファが小さいと切り捨てたうえで成功を返していた問題（不完全なダイジェストのまま整合性検証が通ってしまう、という嫌な穴です）は &lt;code&gt;-EOVERFLOW&lt;/code&gt; を返すよう改められ、&lt;code&gt;arg-&amp;gt;digest_size&lt;/code&gt; への並行アクセスが競合しうる問題は検証済みの &lt;code&gt;hash_alg-&amp;gt;digest_size&lt;/code&gt; を使うよう変更されました。このほか SCTP でも、ASCONF（Address Configuration Change）チャンクのライフサイクル管理に関する Use-After-Free が4件修正されています。マルチホーミングで IP アドレスを動的に追加・削除する際のレース条件が中心です。&lt;/p&gt;
&lt;p&gt;適用対象は幅広く、次のような分布になります。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;バージョン&lt;/th&gt;
					&lt;th&gt;主な利用先&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;7.1.9&lt;/td&gt;
					&lt;td&gt;Fedora 43 以降・Arch Linux・openSUSE Tumbleweed などのローリングリリース系&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6.18.45&lt;/td&gt;
					&lt;td&gt;Fedora 42、Ubuntu 26.04 開発版&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6.12.104&lt;/td&gt;
					&lt;td&gt;Debian 14 候補、Ubuntu 25.04&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6.6.152 / 6.1.183&lt;/td&gt;
					&lt;td&gt;RHEL 互換系（AlmaLinux 9 等）・組み込み Linux・NAS アプライアンス&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5.15.216 / 5.10.265&lt;/td&gt;
					&lt;td&gt;Android の Generic Kernel Image・産業用 IoT 機器&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;アップデートまでのつなぎとしては、Thunderbolt については信頼できないデバイスを接続しないこと、BIOS/UEFI の Thunderbolt セキュリティレベルを &amp;ldquo;User Authorization&amp;rdquo; に設定しておくことが有効です。それと、&lt;a class="link" href="https://www.kernel.org/releases.html" target="_blank" rel="noopener"
 &gt;5.10 と 5.15 は 2026年12月に EOL を迎える予定&lt;/a&gt;なので、そろそろ次のブランチへの移行計画を立てておく時期です。Android の Generic Kernel Image や産業用機器のように更新サイクルの長い領域ほど、この期限は早めに意識しておいたほうがよさそうです。&lt;/p&gt;
&lt;h2 id="5-pnpm-v12-rc--rust-への完全書き直しで-warm-install-が約29倍に"&gt;&lt;a href="#5-pnpm-v12-rc--rust-%e3%81%b8%e3%81%ae%e5%ae%8c%e5%85%a8%e6%9b%b8%e3%81%8d%e7%9b%b4%e3%81%97%e3%81%a7-warm-install-%e3%81%8c%e7%b4%8429%e5%80%8d%e3%81%ab" class="header-anchor"&gt;&lt;/a&gt;5. pnpm v12 RC — Rust への完全書き直しで warm install が約29倍に
&lt;/h2&gt;&lt;p&gt;最後は、開発者ツール側の大きな作り直しです。JavaScript エコシステムの主要パッケージマネージャ pnpm が、バージョン 12 でインストールエンジンを TypeScript/Node.js 実装から Rust（コードネーム「pacquet」）へ書き直しました。2026年8月12日に RC4、8月18日に RC7 が公開されており、RC フェーズが着実に進行しています。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://pnpm.io/benchmarks" target="_blank" rel="noopener"
 &gt;pnpm 公式ベンチマークページ&lt;/a&gt;によれば、数字は次のように動きました。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;シナリオ&lt;/th&gt;
					&lt;th&gt;pnpm v11&lt;/th&gt;
					&lt;th&gt;pnpm v12（Rust）&lt;/th&gt;
					&lt;th&gt;改善&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;warm install（キャッシュ・node_modules ともにある状態）&lt;/td&gt;
					&lt;td&gt;517ms&lt;/td&gt;
					&lt;td&gt;18ms&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;約29倍&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;クリーンインストール&lt;/td&gt;
					&lt;td&gt;8秒&lt;/td&gt;
					&lt;td&gt;2秒&lt;/td&gt;
					&lt;td&gt;約4倍&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;「30倍」という表現を見出しで見かけることもありますが、公式ベンチマークの確定値としては約29倍が実測に近い数字です。&lt;/p&gt;
&lt;p&gt;warm install がこれほど劇的に縮むのは、この処理が実質「既存の &lt;code&gt;node_modules&lt;/code&gt; のツリーを再検証するだけ」だからです。やることが少ないぶん、固定費の割合が大きい。従来は Node.js 上の TypeScript で動いていたため、コマンドを叩くたびに Node.js ランタイムの起動コスト（100ms 超）を払っていました。v12 はプラットフォーム別のネイティブバイナリ（Linux x64/ARM64・macOS x64/ARM64・Windows x64）として配布されるため、この起動オーバーヘッドがまるごと消えます。517ms のうちかなりの部分が「起動して、それから仕事を始める」ための時間だった、というわけです。&lt;/p&gt;
&lt;p&gt;つまり、CI 環境で &lt;code&gt;pnpm install --frozen-lockfile&lt;/code&gt; を毎回実行しているプロジェクトほど、この差はビルド時間の短縮に直結します。数百ミリ秒の話ではありますが、1日に何十回も走るジョブの先頭に必ず付いてくる固定費だと考えると、印象が変わってくるはずです。&lt;/p&gt;
&lt;p&gt;今回の書き直しは、&lt;a class="link" href="https://pnpm.io/blog/whats-different-in-pnpm-12" target="_blank" rel="noopener"
 &gt;pnpm 公式ブログ&lt;/a&gt;の説明によれば、pnpm CLI を TypeScript から Rust へ移植したもので、挙動・フラグ・既定値・エラーコード・ファイル形式・ディレクトリ配置が既存の pnpm と一致するよう設計されています。Rust 側のインストールエンジンは「fetch（パッケージの取得）」と「link（ファイルシステムへのハードリンク展開）」の両フェーズを担当します。CLI・lockfile フォーマット（&lt;code&gt;pnpm-lock.yaml&lt;/code&gt;）・&lt;code&gt;node_modules&lt;/code&gt; のレイアウトは v11 との互換性が保たれており、既存プロジェクトの多くは設定変更なしで移行できる見込みです。循環依存の多い構成では、ピア依存の解決が2〜3倍速く、メモリ使用量も約25%減るという報告もあります。&lt;/p&gt;
&lt;p&gt;ここまで来るのに時間はかかっています。pacquet は当初 &lt;code&gt;pnpm/pacquet&lt;/code&gt; という独立したリポジトリで開発され、ロードマップは3段階で設計されました。&lt;code&gt;--frozen-lockfile&lt;/code&gt; でのヘッドレスインストール、完全な依存関係解決、そして &lt;code&gt;run&lt;/code&gt; や &lt;code&gt;publish&lt;/code&gt; といった非インストール系コマンドの移植です。v11.2 でオプトインのバックエンドとして試験導入が始まり、2026年7月21日には pacquet リポジトリが本体の &lt;code&gt;pnpm/pnpm&lt;/code&gt; へ統合されてアーカイブ化されました。&lt;/p&gt;
&lt;p&gt;破壊的な変更は最小限に抑えられています。&lt;code&gt;sudo&lt;/code&gt; 経由での &lt;code&gt;pnpm setup&lt;/code&gt; / &lt;code&gt;pnpm self-update&lt;/code&gt; が &lt;code&gt;ERR_PNPM_SUDO_NOT_SUPPORTED&lt;/code&gt; でエラーになる、v11→v12 の git tarball 移行コードが削除される、スコープなし認証設定が拒否されレジストリへの紐付けが必須になる、という3点が主なところです。加えて &lt;code&gt;--resolution-only&lt;/code&gt; フラグは &lt;code&gt;pnpm peers check&lt;/code&gt; に統合されました。&lt;code&gt;.npmrc&lt;/code&gt; にレジストリ指定なしの認証情報を書いているチームは、ここだけ事前に直しておく必要があります。&lt;/p&gt;
&lt;p&gt;試すのは簡単で、いま入っている pnpm から次のコマンドを叩くだけです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# 現在インストール済みの pnpm から v12 RC へ切り替える&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pnpm self-update next-12
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# または npm から直接入れる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm install -g pnpm@next-12
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TypeScript compiler の Go 移植や Yarn の Rust 書き直しといった動きと並べると、JavaScript ツールチェーンが「JavaScript 自身から離れる」トレンドの中でも、pnpm v12 は象徴的な一歩だと言えそうです。Node.js のために作られたパッケージマネージャが、Node.js を使わずに動くようになった。ただし RC フェーズである以上、本番環境への適用は正式リリースまで待つのが無難で、CI での試験的導入から始めるのがよさそうです。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;&lt;a href="#%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;まとめ
&lt;/h2&gt;&lt;p&gt;今日並べた5本を振り返ると、「作り直す」という決断の重さの違いが見えてきます。Windows の IKE 拡張は、9年越しの設計ミスが二重解放という形で表面化し、パッチという小さな作り直しで塞がれました。Fedora の AF_ALG 制限は、ひとつの API をまるごと段階的に畳んでいく、もっと大きな作り直しです。そして pnpm は、実装言語そのものを置き換えるという、いちばん思い切った作り直しに踏み切りました。Go 1.27 の ML-DSA も、量子コンピュータという未来の脅威に備えて暗号の土台を差し替えていく作業の一部です。&lt;/p&gt;
&lt;p&gt;古いコードを直しながら使い続けるか、根本から作り直すか。その判断の分かれ目は、たいてい「攻撃面がどれだけ広がっているか」と「作り直すコストに見合うだけの恩恵があるか」のふたつで決まります。IKE の二重解放は直すしかなく、AF_ALG は使っている人が少ないから畳めて、pnpm の Rust 化は速度という明確な恩恵がありました。それぞれの理由をたどってみると、なるほど今日はこの5本が並ぶ日だったのだと納得できます。&lt;/p&gt;
&lt;p&gt;今日のところは、CVE-2026-33824 の修正期限が本日であるという1点だけ持ち帰ってください。残りは週末にでも。&lt;/p&gt;
&lt;h2 id="参考リンク"&gt;&lt;a href="#%e5%8f%82%e8%80%83%e3%83%aa%e3%83%b3%e3%82%af" class="header-anchor"&gt;&lt;/a&gt;参考リンク
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CVE-2026-33824 NVD 詳細: &lt;a class="link" href="https://nvd.nist.gov/vuln/detail/CVE-2026-33824" target="_blank" rel="noopener"
 &gt;https://nvd.nist.gov/vuln/detail/CVE-2026-33824&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft MSRC 公式アドバイザリ: &lt;a class="link" href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33824" target="_blank" rel="noopener"
 &gt;https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33824&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CISA KEV 登録アラート 2026-08-18: &lt;a class="link" href="https://www.cisa.gov/news-events/alerts/2026/08/18/cisa-adds-four-known-exploited-vulnerabilities-catalog" target="_blank" rel="noopener"
 &gt;https://www.cisa.gov/news-events/alerts/2026/08/18/cisa-adds-four-known-exploited-vulnerabilities-catalog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Palo Alto Networks Unit 42 調査（自律型 AI 攻撃キャンペーン）: &lt;a class="link" href="https://unit42.paloaltonetworks.com/autonomous-ai-cyber-attack-campaign/" target="_blank" rel="noopener"
 &gt;https://unit42.paloaltonetworks.com/autonomous-ai-cyber-attack-campaign/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ZDI 技術解析ブログ（CVE-2026-33824）: &lt;a class="link" href="https://www.zerodayinitiative.com/blog/2026/4/22/cve-2026-33824-remote-code-execution-in-windows-ikev2" target="_blank" rel="noopener"
 &gt;https://www.zerodayinitiative.com/blog/2026/4/22/cve-2026-33824-remote-code-execution-in-windows-ikev2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Go チーム公式リリースブログ: &lt;a class="link" href="https://go.dev/blog/go1.27" target="_blank" rel="noopener"
 &gt;https://go.dev/blog/go1.27&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Go 1.27 公式リリースノート: &lt;a class="link" href="https://go.dev/doc/go1.27" target="_blank" rel="noopener"
 &gt;https://go.dev/doc/go1.27&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;crypto/mldsa パッケージドキュメント: &lt;a class="link" href="https://pkg.go.dev/crypto/mldsa" target="_blank" rel="noopener"
 &gt;https://pkg.go.dev/crypto/mldsa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;encoding/json/v2 パッケージドキュメント: &lt;a class="link" href="https://pkg.go.dev/encoding/json/v2" target="_blank" rel="noopener"
 &gt;https://pkg.go.dev/encoding/json/v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NIST FIPS 204 最終標準: &lt;a class="link" href="https://csrc.nist.gov/pubs/fips/204/final" target="_blank" rel="noopener"
 &gt;https://csrc.nist.gov/pubs/fips/204/final&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CVE-2026-31431 NVD 詳細: &lt;a class="link" href="https://nvd.nist.gov/vuln/detail/CVE-2026-31431" target="_blank" rel="noopener"
 &gt;https://nvd.nist.gov/vuln/detail/CVE-2026-31431&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CERT-EU Advisory 2026-005: &lt;a class="link" href="https://cert.europa.eu/publications/security-advisories/2026-005/" target="_blank" rel="noopener"
 &gt;https://cert.europa.eu/publications/security-advisories/2026-005/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora 45 ChangeSet（Phase 1 Change）: &lt;a class="link" href="https://fedoraproject.org/wiki/Releases/45/ChangeSet" target="_blank" rel="noopener"
 &gt;https://fedoraproject.org/wiki/Releases/45/ChangeSet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Red Hat Bugzilla #2517963（Fedora 45 Change の追跡バグ）: &lt;a class="link" href="https://bugzilla.redhat.com/show_bug.cgi?id=2517963" target="_blank" rel="noopener"
 &gt;https://bugzilla.redhat.com/show_bug.cgi?id=2517963&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Phoronix: Linux 7.2 AF_ALG 非推奨化: &lt;a class="link" href="https://www.phoronix.com/news/Linux-AF-ALG-Deprecation" target="_blank" rel="noopener"
 &gt;https://www.phoronix.com/news/Linux-AF-ALG-Deprecation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Phoronix: Linux 7.3 af_alg_restrict sysctl: &lt;a class="link" href="https://www.phoronix.com/news/AF-ALG-Restrict-Sysctl-Linux" target="_blank" rel="noopener"
 &gt;https://www.phoronix.com/news/AF-ALG-Restrict-Sysctl-Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;kernel.org 公式トップページ: &lt;a class="link" href="https://www.kernel.org/" target="_blank" rel="noopener"
 &gt;https://www.kernel.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;7.1.9 ChangeLog: &lt;a class="link" href="https://www.kernel.org/pub/linux/kernel/v7.x/ChangeLog-7.1.9" target="_blank" rel="noopener"
 &gt;https://www.kernel.org/pub/linux/kernel/v7.x/ChangeLog-7.1.9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;6.18.45 ChangeLog: &lt;a class="link" href="https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.18.45" target="_blank" rel="noopener"
 &gt;https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.18.45&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;カーネルリリーススケジュール・LTS EOL 日程: &lt;a class="link" href="https://www.kernel.org/releases.html" target="_blank" rel="noopener"
 &gt;https://www.kernel.org/releases.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pnpm 公式ブログ（v12 変更点）: &lt;a class="link" href="https://pnpm.io/blog/whats-different-in-pnpm-12" target="_blank" rel="noopener"
 &gt;https://pnpm.io/blog/whats-different-in-pnpm-12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pnpm 公式ベンチマークページ: &lt;a class="link" href="https://pnpm.io/benchmarks" target="_blank" rel="noopener"
 &gt;https://pnpm.io/benchmarks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub 公式リリース（RC0 リリースノート）: &lt;a class="link" href="https://github.com/pnpm/pnpm/releases/tag/v12.0.0-rc.0" target="_blank" rel="noopener"
 &gt;https://github.com/pnpm/pnpm/releases/tag/v12.0.0-rc.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pnpm v12 Discussion: &lt;a class="link" href="https://github.com/orgs/pnpm/discussions/11292" target="_blank" rel="noopener"
 &gt;https://github.com/orgs/pnpm/discussions/11292&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pacquet リポジトリ: &lt;a class="link" href="https://github.com/pnpm/pacquet" target="_blank" rel="noopener"
 &gt;https://github.com/pnpm/pacquet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>