ikow

Stars and mentions

Last 30 days, Oct 4 – Nov 2

GitHub stars946
mentions44
070140210280Oct 4Oct 18Nov 2
UTC days · repositories ikow owns5 repositories

Package downloads

No package download history available yet.

Top repositories

ikow’s repositories ranked by pull request authors, as on trending.

Loading

Contributes to

Repositories outside ikow’s account where ikow opened or reviewed pull requests in the past 365 days.

Who noticed ikow

Everyone who starred or forked ikow’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

44posts
Nov 30 posts
  1. Two PHP CVEs (CVSS 9.2) give pre-auth RCE via session.upload_progress, hitting PHP 5.4–8.5.11. Fixed in 8.2.35/8.3.36/8.4.27/8.5.12. Can't patch yet? Disable upload_progress. #PHP #security ikow/php2shell-poc

  2. YouTube · · YouTube description · The Mr. Ozz · ikow/php2shell-poc

    #5 php2shell-poc: 5 RCE Chains + Detection Rules CVE-2026-109618/109619 exposed critical pre-auth RCE vectors in PHP via session.upload_progress. This trending repo delivers 5 exploit chains and comprehensive detection rules for Suricata, Sigma, and ModSecurity. Essential for any security team managing PHP environments. Check out the code: github.com/php2shell-poc GitHub: ikow/php2shell-poc Part of the Weekly Top 5 GitHub Repos series. Every week, the 5 repos with the most new stars. #GitHubTrending #GitHub #OpenSource #Dev #WeeklyTop5

    1 like · 22 views
  3. YouTube · · YouTube description · Ai & Open Source News · ikow/php2shell-poc

    Top 5 New GitHub Repos This Week (Ranked by Stars) #Shorts Top 5 new GitHub repos this week, ranked by stars. Number 5: php2shell-poc. CVE-2026-109618/109619 5 RCE chains + detection rules (Suricata, Sigma, ModSecurity). PHP... 1,761 stars. In this Short: - Number 4: fairplay-decrypt. Offline FairPlay App Store IPA decryption with independent key derivation. 2,003... - Number 3: REA-Prompts. REAP - Prompts for you to use REA (Reverse Engineer Anything), get the most out of... - Number 2: gpu-unlock. Unlock FP/BF16 instruction issue rate on Nvidia 3000's cards to their professional... - Number 1: free-my-tv. A fast, ad-free home screen for Google TV, LG webOS and Samsung Tizen. One button to... Which one is your #1? Here are the links: 1. simbasjungles/free-my-tv - simbasjungles/free-my-tv 2. Zagitta/gpu-unlock - Zagitta/gpu-unlock 3. JoasASantos/REA-Prompts - JoasASantos/REA-Prompts 4. EthanArbuckle/fairplay-decrypt - EthanArbuckle/fairplay-decrypt 5. ikow/php2shell-poc - ikow/php2shell-poc The top new GitHub repos of the week, ranked by stars. A new top 5 every week. Narrated with an AI clone of the creator's own voice. #Shorts #GitHub #OpenSource #Top5 #Programming #TechNews

    3 likes · 1 comment · 892 views
  4. Here are the links: 1. simbasjungles/free-my-tv - simbasjungles/free-my-tv 2. Zagitta/gpu-unlock - Zagitta/gpu-unlock 3. JoasASantos/REA-Prompts - JoasASantos/REA-Prompts 4. EthanArbuckle/fairplay-decrypt - EthanArbuckle/fairplay-decrypt 5. ikow/php2shell-poc - ikow/php2shell-poc Which one is your #1?

  5. PHPにおけるSession injectionとLFIのRCEチェーンの観察 最初に 本記事は著者自身が勉強したものを整理したり知識を共有するために記載しています。 用語の説明には本質から逸脱しないよう努めますが、読みやすさの観点からある程度抽象性を持たせています。 そのため正確な情報を約束するものではないのでご了承ください。 php2shellというけれど 脆弱性CVE-2026-109618/CVE-2026-109619、いわゆるphp2shellについて会社がてんやわんやする中、「php2shellの対応で~」なんて言ったり聞いたりすることが多々ありました。 ふと、「脆弱性って2つあるけど、どっちもphp2shellなん?」と思ったので、お勉強。 今回はGitHubで公開されているPoCを通してphp2shellってなんだろうを考え、昔からあるSession injection + LFIのRCEをEDRから覗いてみようかと思います。 注意事項 今回のPoCでは現在話題になっているCVE-2026-109618/CVE-2026-109619は使用しません。 類似の手法を観察しphp2shellとこれら2つの脆弱性の関係を理解します。 php2shellについて php2shellを理解するために以下のPoCを参考にします。 ikow/php2shell-poc CVE-2026-109618/CVE-2026-109619の概要 脆弱性 説明 CVE-2026-109618 メモリ不足(OOM)のエラー処理に起因する脆弱性 CVE-2026-109619 不正なリクエスト処理によってUAFが発生する脆弱性 UAF(Use-After-Free)はCTFでちょこちょこ見たので、改めてメモリの中を見ながら解いてみようかなーと思いました。 これらの脆弱性はどちらもRCE(リモートコード実行)につながる脆弱性です。 session.upload_progressを使ったアタックチェーン PHPにはsession.upload_progressというファイルアップロードの進捗を管理する機能があります。 この機能の悪用とCVE-2026-109618やCVE-2026-109619を組み合わせて行うRCEがphp2shellという手法です。 php2shellはsession.upload_progressの悪用を足がかりとして脆弱性の悪用へとつなぐRCEを実現するためのアタックチェーンと言えます。 補足:CVE-2026-109618、CVE-2026-109619を使用したphp2shellではsession.upload_progressの悪用は数ある足がかりのひとつでしかないことが後から判明しました。 これはsession.upload_progressを無効化することが限定的な対処にしかならないということを示しています。 5つの攻撃チェーン PoCではsession.upload_progressの悪用からの攻撃チェーンの展開先として5つの手法が紹介されています。 これらはsession.upload_progressの悪用という観点では共通していますが、悪用の方法についても異なっています。 チェーン 概要 内容 A Session injection + LFI セッション汚染からのLFI B var_destroy UAF → handler overwrite PHPエンジン内のUAF C Handler mismatch → __destruct PHP-FPM の状態不整合 D OOM corruption → stale EG() CVE-2026-109618の利用 E FPM session OOM → stale BG() CVE-2026-109619の利用 聞きなれない言葉が並びますが、CVE-2026-109618/CVE-2026-109619を利用したものを含む5つの攻撃チェーンが存在していることがわかります。 チェーンA、B、CにおいてはRCEを実現するための他の条件が存在しますが、D、Eに関しては他の条件が存在しません。 このことから今回発表された脆弱性がいかに重大なものであるかがわかります。 session.upload_progressの悪用等から展開されたRCEチェーンという観点であれば、上記の5つはすべて広義のphp2shell、今回の騒動の元凶であるCVE-2026-109618/CVE-2026-109619に重きを置くのであればD、Eのみが狭義のphp2shellであると言えると思います。 (上記の補足もあるので、session.upload_progress悪用がphp2shellにおける必須の要素ではないですね。) Session injection + LFIの観察 PoCではチェーンA、B、Cについての公開はありますが、今回の脆弱性を用いたチェーンD、Eについては限定公開となっています。 そのため、ここからはPHPをつかったRCEをSOCとして理解するために上記のチェーンAについて、EDRで検知した情報の一部を見ていきます。 チェーンAについて概要 チェーンAはSession injectionとLFIを組み合わせた攻撃チェーンです。 Session injectionとLFI、それぞれについては以下で説明します。 Session injectionについて session.upload_progressはセッションファイルというファイルアップロード進捗を記録するファイルを生成します。 細工したリクエストを受け取ると、セッションファイルに進捗を記載する際に、ファイル名などのユーザー入力値がそのまま記録されるため、OSコマンドを実行するPHPコード(<?php system(...); ?> など)がセッションファイル内に無加工で記載されてしまいます。 session.upload_progressでは仕様上、 サニタイジングをせずにセッションファイルへの書き込みを行うようになっています。 LFIについて PHPにはincludeという、外部ファイルを読み込んで実行する機能があります。 LFI(Local File Inclusion)はユーザーからの入力をもとに指示されたファイルを不用意に読み込む脆弱性です。 今回ではOSコマンドを実行するPHPコードが挿入されたセッションファイルのパス(/var/lib/php/sessions/sess_~)を指定しインクルードさせます。 その際読み込んだファイル(セッションファイル)の中にPHPコードがある場合、PHPエンジン(PHPスクリプトを実行する機能)はそのコードを 「実行可能なPHPコード」として解釈・実行してしまいます。 チェーンA成立の条件 チェーンAを成立させるためには、外部ファイルを検証をせず実行してしまうLFIの脆弱性があるアプリケーションが存在していることが条件です。 これは不十分な実装から生まれる脆弱性であるため成立するシチュエーションは限定的です。 プロセスツリーの特徴 チェーンAで検知したプロセスツリーは以下です。 今回は実際のシナリオに近づけわかりやすくするために、RCEで実行するコマンドをcurlでの通信に変更しています。 WebサーバーのプロセスであるApache2(PID:1034)からシェルのプロセスであるdashが生成されています。 これは今回のPoCのみならずRCEやWEBシェルでのOSコマンド実行の多くにおいて共通するプロセスツリーの特徴です。 dashの子プロセスを調査することで実行されたOSコマンドについて知ることができます。 シェルスクリプト実行の場合は複数の子プロセスを持つ可能性もあるので、集約されたプロセスツリーを見るだけではなくdashによって生成された子プロセスを洗い出すようにしましょう。 Webサーバーのプロセスからシェルプロセスが生成されていることに対して注意を持っておくことは脆弱性を使ったRCEやWEBシェルを早期に予測する助けとなります。 Apacheプロセスの調査 Apache2(PID:1034)には通信を受信したログがあります。 (以下のログはEDRで検知したログの属性名をわかりやすく修正・抜粋したものです。これは以降に記載するログについても同様です。) EventName:NetworkReceiveAccept ImageFileName:apache2 ProcessId:1034 SourceIPaddress:XXX.XXX.XXX.XXX Port:80 このログからわかる通信元IPを頼りにFWやNDRでパケットを見つけ、中身を確認することはRCEの調査において有効に働く可能性が高いです。 今回のチェーンAでは、リクエストの特定の属性に入れる値を細工してセッションファイルに不正な値を書き込みます。 そのため、送られてきたリクエストにはRCEの実行や使用された脆弱性を裏付ける痕跡があるかもしれません。 異常なセッションファイル読み込み Apache2(PID:1034)を調査するとセッションファイルをPHPスクリプトとして実行した旨のログがあることがわかりました。 EventName:PhpScriptExecution ImageFileName:apache2 ProcessId:1034 ScriptFileName:/var/lib/php/sessions/sess_exploitb3c02674f7ae4eb1995f ディレクトリ「/var/lib/php/sessions」にある「sess_~」というのがセッションファイルです。 セッションファイルを読み込むこと自体は通常通りの処理ですが、スクリプトとして実行することは普通ではありえません。 これは不正に書き込まれたセッションファイルをLFIによって実行されたことを示唆しています。 まとめ 新しい脆弱性を使った攻撃はEDR等のセキュリティ製品で検知できない場合が多々あります。 そのほかにも本質を懸念した内容ではないアラートが出たりすることがあります。 過去PHPの脆弱性を突かれRCEによってマイニングツールが配置されたクリプトジャッキングを見たことがありますが、EDRでのアラートはマイニングツールに対するPUPアラートだけでした。 そのような場合でもRCEやWEBシェルのプロセスツリーの特徴を意識しておけば、素早く調査方針を立てることができます。 今回のようなEDRでの観察が直接関係しなくとも調査時に仮説を立てる際に役に立てばいいなと思ってます。

  6. PHP2Shell: The Patch Was Not the Start of the Incident Four days before the PHP security team published its advisory on the php2shell flaws, Amazon Threat Intelligence had already caught an exploitation attempt against its honeypot network on 17 October 2026 (Source: Amazon Threat Intelligence, 2026). In the Philippines that gap is not academic, because the National Privacy Commission requires a personal information controller to notify it within 72 hours of knowing or reasonably believing a breach has occurred (Source: National Privacy Commission, 2016). The Department of Information and Communications Technology separately requires government agencies to fix critical vulnerabilities within five business days (Source: Newsbytes.PH, 2026). !Infographic What actually broke PHP shipped fixed versions 8.2.35, 8.3.36, 8.4.27 and 8.5.12 on 21 October 2026, covering two flaws: CVE-2026-109618, remote code execution through out-of-memory corruption, and CVE-2026-109619, remote code execution through stale global state left by an earlier request (Source: PHP, 2026). The PHP security team rates both at CVSS v4.0 9.2, and the US National Vulnerability Database scores CVE-2026-109618 at 9.8 on the older CVSS 3.1 scale (Source: NIST, 2026). The vulnerable code path dates back to PHP 5.4.0, released in 2012 (Source: Tenable, 2026). Every PHP installation serving web requests is affected, and the PHP team considers risk highest for Apache with mod_php, where a demonstrated exploit can trigger before any application code runs (Source: PHP, 2026). PHP runs on 69.3 percent of websites whose server-side language is known, and 7.7 percent of PHP sites still run the end-of-life 5.x branch (Source: W3Techs, 2026). The clock started before the advisory Two teams reached opposite conclusions within 24 hours, and both are worth holding. Sansec reported on 22 October that mass exploitation was less likely than first expected, because the public proof-of-concept exploits do not work against a default PHP installation (Source: Sansec, 2026). Tenable reported on the same date that php2shell was being broadly exploited in the wild (Source: Tenable, 2026). Amazon Threat Intelligence recommends starting investigations from at least 17 October, not the disclosure date, and argues that the gap between a patch and a working exploit keeps shrinking, partly because AI-assisted analysis turns a patch diff into an exploit faster (Source: Amazon Threat Intelligence, 2026). CISA advises organisations that cannot update immediately, or that run unsupported PHP 8.1 and earlier, to take PHP-based systems offline until they can be patched (Source: CISA, 2026). Why a memory bug becomes a privacy incident CVE-2026-109618 does more than execute code. PHP's upload-progress handler can return freed worker memory to the client inside a PHPSESSID cookie, and that memory can hold passwords, session tokens, API keys and TLS private keys from other requests (Source: Sansec, 2026). That is where Philippine rules engage. Section 14 of NPC Circular 16-03 states that discovery of a vulnerability allowing access to personal data shall prompt the controller to assess whether a personal data breach has occurred (Source: National Privacy Commission, 2016). Section 11 lists usernames, passwords and other login data among the information that triggers notification when there is reason to believe it was acquired without authorization and a real risk of serious harm exists (Source: National Privacy Commission, 2016). Section 22 reaches beyond notification. Every security incident and personal data breach must be documented in written reports, including those below the notification threshold, and a summary goes to the Commission annually (Source: National Privacy Commission, 2016). For 2025, that window is open until 10 November 2026, it must go through the Data Breach Notification Management System rather than email, and a zero-incident report is still required (Source: National Privacy Commission, 2026). A workplan for 72 hours - Inventory every host running PHP, including hosts where PHP arrives as a dependency of WordPress or Laravel rather than a deliberate install (Source: CISA, 2026). - Move to a fixed PHP release and restart every worker (Source: PHP, 2026). - If patching is not immediate, set session.upload_progress.enabled to 0 and memory_limit to -1 where applications cannot override them, then restart every worker (Source: PHP, 2026). - Hunt web server logs for POST requests carrying the PHP_SESSION_UPLOAD_PROGRESS string in multipart form bodies, and for PHP workers launching shells (Source: Amazon Threat Intelligence, 2026). - Deploy the community Suricata, Sigma and ModSecurity detection rules before patching finishes, so the alert arrives with the fix (Source: GitHub, 2026). Yano.AI applies this same priority order inside its Cognitive AI approach to security operations: rank exposure by what is internet-facing and exploitable, close it, then prove what happened from logs rather than assumption. Machines read the log volume; the judgement about what constitutes a notifiable breach stays with the people who own the data. FAQ Q: Do I need to worry if my site is not built on PHP? A: Yes, if PHP is present at all. The flaws sit in the PHP engine, so a Magento or WooCommerce store can be affected even when its own code is clean (Source: Sansec, 2026). WordPress alone is 39.6 percent of all websites, and it runs on PHP (Source: W3Techs, 2026). Q: What if we run an end-of-life PHP version? A: PHP no longer publishes official releases for 8.1 and older, but the security team published minimal source backports for 7.4, 8.0 and 8.1, and some vendors backported the fix into packaged builds (Source: PHP, 2026). PHP 8.2 itself reaches end of life on 31 December 2026 (Source: PHP, 2026). Q: If we find no evidence of compromise, do we still have a reporting duty? A: Yes. Section 22 of NPC Circular 16-03 requires written documentation of every security incident, including those below the notification threshold (Source: National Privacy Commission, 2016). The 2025 Annual Security Incident Report must still be filed through the DBNMS by 10 November 2026 (Source: National Privacy Commission, 2026). Key Takeaway The disclosure date was not the beginning. Exposure started on 17 October 2026, and by the time PHP shipped the fix, working exploits were already circulating against it (Source: Amazon Threat Intelligence, 2026). For Philippine organisations, patching and reporting are the same job: inventory, patch, hunt from 17 October, and document everything, including incidents that never crossed the notification threshold. What PHP version is running on your most exposed server right now, and who signs the report to the National Privacy Commission if it was compromised? Sources - PHP Security Advisory: Critical RCE vulnerabilities (PHP, 2026) - PHP Supported Versions (PHP, 2026) - NVD CVE-2026-109618 record (NIST, 2026) - Amazon Threat Intelligence: PHP2Shell exploitation (Amazon, 2026) - CISA Alert: Critical PHP Vulnerabilities (CISA, 2026) - php2shell FAQ (Tenable, 2026) - PHP2Shell: PHP RCE research (Sansec, 2026) - PHP Usage Statistics (W3Techs, 2026) - WordPress Usage Statistics (W3Techs, 2026) - NPC Circular No. 16-03, Personal Data Breach Management (National Privacy Commission, 2016) - NPC Advisory No. 2026-03: Annual Security Incident Reports (National Privacy Commission, 2026) - DICT orders annual security testing for gov't IT systems (Newsbytes.PH, 2026) - ikow/php2shell-poc detection rules (GitHub, 2026)

  7. Ohboy the plot thickens ikow/brotli2crash Trying my damndest to comprehend this proof...

  8. YouTube · · YouTube description · The Mr. Ozz · ikow/php2shell-poc

    GitHub Top 10 This Week — Week of October 23, 2026 (Ep. 007) | Best New Open Source Repos 🔥 GitHub Top 10 for Week of October 23, 2026 — the most-starred new open source repositories this week, curated every Friday by TheMrOzz. This week's top picks: cleanyourtv, MacNativeGames, free-my-tv — and 7 more you need to see! Whether you're a software engineer, indie developer, or just love open source, this weekly series keeps you on the cutting edge of GitHub trending repos — AI tools, developer utilities, programming frameworks, and more. 📌 TIMESTAMPS: 0:00 Intro — Week of October 23, 2026 0:10 #1 Gathin23/cleanyourtv (26,985 ⭐) 0:55 #2 ly05010419/MacNativeGames (4,802 ⭐) 1:40 #3 simbasjungles/free-my-tv (3,787 ⭐) 2:25 #4 pengchujin/aerial-tv (3,733 ⭐) 3:10 #5 xiaoyang111222/cn-math-taxonomy (2,689 ⭐) 3:55 #6 tek-sys-hub/Rubix-lang (1,913 ⭐) 4:40 #7 aicodeking/leanrea (1,679 ⭐) 5:25 #8 ikow/php2shell-poc (1,651 ⭐) 6:10 #9 JoasASantos/REA-Prompts (1,635 ⭐) 6:55 #10 alchaincyf/huashu-motion (1,519 ⭐) 7:40 Outro 💡 Featured languages this week: Java, C, Kotlin, Python 📂 Full list: #1 Gathin23/cleanyourtv — 26,985 stars | Gathin23/cleanyourtv #2 ly05010419/MacNativeGames — 4,802 stars | ly05010419/MacNativeGames #3 simbasjungles/free-my-tv — 3,787 stars | simbasjungles/free-my-tv #4 pengchujin/aerial-tv — 3,733 stars | pengchujin/aerial-tv #5 xiaoyang111222/cn-math-taxonomy — 2,689 stars | xiaoyang111222/cn-math-taxonomy #6 tek-sys-hub/Rubix-lang — 1,913 stars | tek-sys-hub/Rubix-lang #7 aicodeking/leanrea — 1,679 stars | aicodeking/leanrea #8 ikow/php2shell-poc — 1,651 stars | ikow/php2shell-poc #9 JoasASantos/REA-Prompts — 1,635 stars | JoasASantos/REA-Prompts #10 alchaincyf/huashu-motion — 1,519 stars | alchaincyf/huashu-motion 🔔 New episode every Friday at 10 PM TRT / 7 PM UTC. Subscribe so you never miss a GitHub trend! #github #opensource #programming #developer #githubtrending #coding #TheMrOzz #weeklytop10 #tech #openSource #devtools #softwareengineering #repositories #newrepos #buildInPublic

    21 views
  9. من تست کردم، این به شکل ترسناکی کار میکنه! خودش یه داکر با نسخه آسیب پذیر داره که رن میکنید و با زدن دستور اجرای اکسپلویت به راحتی از راه دور هر فرمانی رو روی اون سرور اجرا میکنه! ikow/php2shell-poc #هک #PHP #امنیت CVE-2026-109618 / CVE-2026-109619 t.co

    51 likes · 1 repost · 2,340 views
  10. 【要対応】Node.jsの脆弱性10件が修正。Claude Code・MCP利用者が今すぐ確認すべきこと TL;DR 2026年10月21日、Node.jsの深刻な脆弱性を含む10件が修正された。 修正版は v22.23.4 / v24.22.1 / v26.12.1。該当する古いNodeを使っているなら更新が必要 Nodeを更新しただけでは終わらない。 自分のMacでは、修正前のNodeで動くプロセスが19個残っていた Claude Code本体、MCPサーバー、Cursor CLI、公開アプリでは確認・更新する場所が異なる 本番のDockerイメージも、再ビルド・再デプロイしない限り古いまま残る この記事では、今すぐ確認する手順、実際に対応した結果、同じことを繰り返さないための仕組みをまとめた Node を上げた。19個、直っていなかった 10月23日、仕事のチャットに「Node.js が危ないのでアップデート必須。Claude Code を使っている人はガッツリ関係する。会社単位じゃなく個人単位で」と連絡が回ってきた。 自分も最初はこう思った。 「Claude Code って Node で動いてるんだっけ?」 「本体は勝手に更新されるんでしょ?」 「GitHub も見るの? GCP は? Vercel は?」 調べてみたら、答えはどれも「半分合ってる」だった。 自分の Mac を見たら、Node は修正前の 26.10.0 のまま。brew upgrade node で 26.12.1 に上げた。これで終わり、と思った。 念のためプロセスを数えた。 修正前の Node で動き続けているものが、19個あった。 Astro の dev サーバーが10個。Next.js が4個。Claude Code が裏で起動した MCP サーバーが5個。いちばん古いものは1週間前から動いていた。しかも最初に打ったコマンドでは、そのうち3個が見えていなかった。 極めつけは、この調べものに使っていた Claude Code 自身だ。スマホから使うために Mac mini で常駐させていた Remote Control の親プロセスが、1週間前の 2.1.292 のまま動いていた。claude update で新しい版を入れても、そこから起動するセッションは古いままだった(後述)。 アップデートは、インストールした時点では終わらない。この記事は、その話だ。 自分はどれ? 3つの質問で判定する 質問 はい → いいえ → ① Claude Code・Cursor・Codex などの AI ツールを使っている? A に該当。次の質問へ 次の質問へ ② ターミナルで node -v を打つと、バージョンが出る? B に該当。次の質問へ 次の質問へ(ただしアプリ同梱の Node は残る。後述) ③ Node で作ったアプリやサーバーを、ネットに公開している? C に該当 — そのうえで、node -v や本番の Node が v18・v20・v23・v25 なら D も当てはまる。修正版が出ない。 区分 誰 やること 所要 A AI ツールを使っている人 Claude Code・Cursor CLI・デスクトップアプリを最新に 5分 B PC に Node が入っている人(MCP サーバー、npx、npm で入れた CLI、dev サーバー) Node を更新して、動いているものを再起動 10〜20分 C Node のアプリを公開している人 本番の実行環境を更新して再デプロイ 環境しだい D Node 20 以前などを使っている人 22 / 24 系に乗り換え 半日〜 Claude Code 本体だけ使っている人は、まず A。たぶんこの層がいちばん多い。 ただ、Claude Code を入れるときに「Node も入れてね」と言われて Homebrew で入れた人は多いはず。その場合は B も当てはまる。node -v を一回打ってみてほしい。 結局、どこを見ればいいのか 見る場所は3層ある。 層 何を見る 見落としやすいもの ① PC(持っている台数ぶん) Claude Code の版、node -v、動いている Node、アプリ同梱の Node 普段使わないPC、起動しっぱなしの dev サーバー ② リポジトリ Dockerfile の FROM node:..、.nvmrc / .node-version、package.json の engines、GitHub Actions の node-version FROM node:20 のまま、node-version: 24.14.0 みたいな細かい固定 ③ 本番 実際に動いているランタイムの版 「Dockerfile は直したけど、まだデプロイしてない」 ②はリポジトリの置き場所でこう打てば一覧が出る。 grep -rnE "FROM node|node-version|\"node\":" \ --include=Dockerfile* --include=.yml --include=.yaml \ --include=package.json --include=.nvmrc --include=.node-version \ --exclude-dir=node_modules . 自分のリポジトリ(10本ちょっと)でやったら、こうなった。 本番が Cloud Run(自前の Dockerfile)で FROM node:20-alpine のもの:1本。修正が出ない系列。最優先 本番が Cloud Run で FROM node:22-alpine のもの:3本。イメージを作り直して再デプロイ CI で node-version: 24.14.0 に固定しているもの:1本。本番は Cloudflare Workers なので Node では動いていない。CI だけ上げればいい Python のサービス、静的サイト(Firebase Hosting):本番は関係なし CI(GitHub Actions)は、外から来たデータを展開する場面が少ないので優先度は低い。でも node-version の固定は、ついでに上げておく。 そもそも何が直ったのか Node.js の公式発表では、10件のうち4件が深刻度「高」だった。 CVE ざっくり言うと 危ない場面 CVE-2026-111497 Brotli(圧縮形式の一つ)を展開するとき、メモリの範囲外に書き込める 外から来た Brotli データを Node が展開するとき CVE-2026-106069 0127.0.0.1 みたいな変な書き方の IP アドレスで、TLS 証明書のチェックがずれる 接続先のホスト名を外部入力で決めていて、かつ通信経路を握られているとき CVE-2026-105483 全角数字の IP アドレスで、TLS 証明書のチェックがずれる(24 / 26 系だけ) 同上 CVE-2026-105482 dns.resolve が名前の途中の NUL 文字(\0)で切れる 「許可リストで名前をチェックしてから名前解決する」作りのとき 残り6件は中・低。HTTP の keep-alive、crypto.randomUUID()、権限モデルまわりなど。 修正版は v22.23.4 / v24.22.1 / v26.12.1。回避策は出ていない。上げるしかない。 Brotli のバグは、理屈の上では任意のコード実行までつながる種類のものだ。Node の発表でも「リモートからのコード実行を許す」と書かれている。ただ、10月23日時点で GitHub に公開されている PoC と解析を見ると、5本のうち4本は「リモートからのコード実行は成立していない。実際にはプロセスを落とせる(DoS)」という結論だった(条件を固めたローカル環境でなら実行できた、という報告はある)。落とせるだけでも、サーバーなら十分困る。 どんな場合に危ないのか ここがいちばん混乱しているところだと思う。 TLS と DNS の3件は、条件がかなり狭い。「接続先を外部入力で決めるサーバーを作っている」「経路上に攻撃者がいる」くらいの前提が要る。普通に使っているだけなら、ほぼ当たらない。 問題は Brotli の1件だ。こっちは入口が広い。 当たる:Node が外部のサイトやAPIを fetch() する Node の fetch() は、HTTPS のとき「Brotli で圧縮して送ってくれていいよ」とサーバーに伝える。サーバーが Brotli で返してきたら、中身を自動で展開する。 つまり、相手のサーバーが悪意を持っていたり、乗っ取られていたりしたら、fetch() しただけで細工したデータが届く。 当てはまるもの: URL を取りに行く MCP サーバー(Web取得、ブラウザ操作、スクレイピング系) 外部 API を叩くスクリプトやバッチ Claude Code に作らせた「URLを入れると要約するツール」みたいなもの 当たる:外からのリクエスト本文を展開するサーバー Express 5(body-parser 2.x)は、express.json() などのパーサーを使っていると、Content-Encoding: br のリクエスト本文を既定で展開する。 Express で API を公開しているなら、C に該当する。 ちなみに公開されている PoC(攻撃の実証コード)の一部も Express を使っている。ただし受け取った本文を自前の処理で Brotli 展開する作りで、body-parser の既定の動作を狙ったものではない。 当たる:受け取ったファイルを zlib で展開する アップロードされた .br ファイルを展開する、みたいな処理。これも外から来たデータの展開だ。 ほぼ当たらない:自分のPCの中だけで完結するもの localhost でしか見ていない dev サーバーが、外部と通信していないなら、細工したデータが届く経路がない。 ただし「dev サーバーの中で外部 API を fetch() している」なら当たる。Next.js のサーバー側で外部APIを呼んでいる、とか。けっこうある。 当たらない:Node を入れているだけ インストールされているだけで、何も動いていなければ攻撃は届かない。ただ、MCP サーバーは Claude Code を開くたびに裏で起動する。「動かしていないつもり」が一番あぶない。 Claude Code 本体の話:Node じゃなくて Bun 本体は Node を使っていない Claude Code の公式ドキュメントには、「インストールされた claude は Node を呼び出さない」とある。npm で入れた場合も、中身は同じネイティブバイナリだ。 だから「Node を更新すれば Claude Code 本体が直る」は、正しくない。 中の Bun にも、同じ Brotli のコードが入っていた Claude Code のネイティブ版は Bun で作られている。 その Bun にも、同じ Brotli ライブラリが入っていた。Bun の issue #46352 では「全リリースが影響を受ける」とされ、10月22日に修正がマージされた(日本時間11時ごろ)。修正を含む Bun v1.4.4 のリリースは同日19時ごろだ。 じゃあ Claude Code 本体で攻撃が届くのか。ここは分からない。Claude Code の中で、外から来た Brotli データを Bun が展開する場面があるのか。Anthropic は何も公表していない。 2.1.308 に上げた。直ったかは分からない 自分の Mac に入っていたのは 2.1.306。公開は10月21日(日本時間12時ごろ)で、Bun の修正より前だ。 claude update を打ったら 2.1.308 になった。 $ claude update Current version: 2.1.306 Updating to 2.1.308... Successfully updated from 2.1.306 to version 2.1.308 2.1.308 の公開は10月22日の13時半ごろ。Bun の修正マージよりは後、Bun v1.4.4 のリリースよりは前。リリースノートは「Bug fixes and reliability improvements」の1行だけだった。 なので言えるのは「最新にしておくのが、いまできる最善」まで。直ったとは言えない。 「本体は勝手に更新される」は本当か 入れ方による。公式ドキュメントを読むと、こうなっている。 入れ方 自動で更新される? 手で上げるコマンド 公式インストーラー(curl ... install.sh) される claude update npm される(書き込み権限があれば) npm install -g @anthropic-ai/claude-code@latest Homebrew(brew install --cask claude-code) 既定ではされない brew upgrade claude-code WinGet 既定ではされない winget upgrade Anthropic.ClaudeCode apt / dnf / apk されない OS のアップデートで Homebrew と WinGet は、CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE=1 を設定すると Claude Code が代わりに更新してくれる。 自分の Mac は公式インストーラー版で、9/26・10/7・10/16・10/22 と更新されていた。 それでも 2.1.306 で止まっていた。自動更新は「起動したときと、動いている間にときどき」見に行って、次に起動したときに切り替わる仕組みだからだ。急ぐなら claude update を手で打つ。 ちなみに配布には latest と stable(ふだんは約1週間遅れ)の2つのチャンネルがある。今回は10月22日の時点で、stable も 2.1.308 になっていた。 逆に Node は、誰も勝手に更新してくれない。Homebrew で入れたなら、brew upgrade を打つまで永遠に古いままだ。 手順 まず一発で確認する PC ごとに、これをターミナルに貼る。普段使わない PC も忘れずに。 Mac / Linux: echo "== Claude Code"; claude --version 2>/dev/null || echo "入っていない" brew list --cask 2>/dev/null | grep '^claude-code' && echo "↑ Homebrew 版。既定では自動更新されない" echo "== Node"; which -a node 2>/dev/null; node -v 2>/dev/null || echo "入っていない" echo "== Cursor CLI"; cursor-agent --version 2>/dev/null || echo "入っていない" echo "== 動いている Node"; ps -axo pid,lstart,command | grep -E '[n]ode |[n]ext-server' | cut -c1-150 Windows(PowerShell): "== Claude Code"; claude --version "== Node"; where.exe node; node -v "== 動いている Node"; Get-Process node -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path 最後の「動いている Node」の読み方: 起動時刻が Node をアップデートする前 → 古い Node で動いている。再起動する パスが /Applications/〜.app/ の中 → アプリが同梱している Node。アプリの更新を待つ パスが Homebrew の Caskroom の中 → Homebrew で入れたツール(Cursor CLI など)が同梱している Node。brew upgrade --cask <名前> で上がることがある コマンドの引数に node という文字を含むだけの別のプロセスも出てくる。パスを見て判断する next-server → Next.js の dev サーバー。名前に node が付かないので、grep node だけだと見逃す。自分はこれで3個見逃した 「入っていない」と出ても、それは PATH の上に無いというだけだ。アプリ同梱の Node、Docker、本番は別に見る(下の「Node を同梱しているアプリ」と C)。 A:AI ツール本体 claude update claude --version # 2.1.308 以降を推奨(修正が入ったかは未公表) Homebrew で入れた人は brew upgrade claude-code(latest 版なら claude-code@latest)、WinGet なら winget upgrade Anthropic.ClaudeCode。 開いている Claude Code は、一度閉じて開き直す。動いているプロセスは古い版のままだからだ。 Remote Control(claude remote-control)を常駐させている人は要注意だ。自分の Mac mini では、スマホから使うために claude remote-control を tmux の中で常駐させていた。これが10月16日に起動したまま、当時の 2.1.292 で動き続けていた。スマホから新しく作ったセッションも、全部この 2.1.292 で起動していた。claude update で 2.1.308 を入れても、常駐している親が古いままなら子も古い。 常駐している親ごと止めて、起動し直す。自分の環境(tmux セッション名 claude、LaunchAgent で起動)ならこうだ。動いているリモートのセッションは全部切れるので、作業が終わってから。 tmux kill-session -t '=claude' launchctl kickstart gui/$(id -u)/com.nekoai.remote-control # 自分で作った LaunchAgent の名前 ps -axo lstart,command | grep '[c]laude/versions/' # 新しい版で動いているか確認 Cursor を使っているなら CLI も。中に自前の Node を抱えている。 cursor-agent update # 公式インストーラーで入れた場合 brew upgrade --cask cursor-cli # Homebrew で入れた場合 自分の Mac では、cursor-agent update で 2026.10.22 版になって、中の Node が v26.8.1 から v26.12.1 に上がった。 デスクトップアプリも見ておく。10月23日、もう1台の Mac で Claude のデスクトップアプリを開いたら「Claude has an important security update」と出た。Mac mini のほうは、気づいたときには自動で入っていた。ChatGPT のデスクトップアプリにもアップデートが来ていた。中身が今回の件かは、どちらも公表されていない。Claude アプリの更新版(3.6556.1)の中の Node は v24.22.0 で、Node の修正版ではなかった。アプリのログを見ると、アプリに内蔵されている Claude Code が 2.1.304 から 2.1.308 に上がっていた。アプリの「新着情報」(10月22日付)には Node や Brotli の記載はなく、作業フォルダの権限や SSH まわりの変更・修正が並んでいた。「important」はそっちの話なのだと思う。それでも「important」と出ているなら入れる。 Mac の Claude アプリなら、画面上のメニューバーの「Claude」→「アップデートを確認…」→「再起動してアップデート」。アプリの中のアカウントメニューには無いので注意。 B:PC の Node まず、どこから入れた Node かを確認する。 which -a node ls -l "$(which node)" node -v ls -l の結果 入れ方 更新コマンド .../Cellar/node/... を指している Homebrew brew update && brew upgrade node ~/.nvm/... nvm 下を参照 fnm を含むパス fnm fnm install 24 && fnm default 24 ~/.volta/... Volta volta install node@24 mise を含むパス mise mise use -g node@24 /usr/local/bin/node で Cellar を指していない 公式インストーラー nodejs.org から最新版を入れ直す /usr/local/bin/node は、Intel Mac の Homebrew でもここに入る。ls -l で Cellar を指していたら Homebrew だ。Homebrew で node@22 や node@24 を入れているなら、brew upgrade node@24 のように指定する。 nvm は、入れるだけだと足りない。 nvm install 24 --reinstall-packages-from=current # npm -g で入れたものも引き継ぐ nvm alias default 24 nvm use 24 # 今のターミナルも切り替える プロジェクトの .nvmrc や、MCP の設定ファイルに ~/.nvm/versions/node/v22.x/... のような絶対パスを書いていたら、そっちも直す。古い版は nvm uninstall <古い版> で消せる。fnm・Volta・mise も、固定や絶対パスの事情は同じだ。 Windows はこう。 where.exe node の結果 入れ方 更新 C:\Program Files\nodejs\node.exe 公式インストーラー or winget winget list OpenJS で ID を確認して winget upgrade <ID>。無ければ nodejs.org から入れ直す ...\nvm... や nodejs へのリンク nvm-windows nvm install 24.22.1 → nvm use 24.22.1 .volta / fnm を含むパス Volta / fnm Mac と同じ winget の ID は、LTS 版なら OpenJS.NodeJS.LTS、最新版なら OpenJS.NodeJS。入れている方を上げる。 上げたら確認。 node -v v26.12.1 / v24.22.1 / v22.23.4 以降ならOK(v23・v25 は修正が出ないので D へ) ここからが本番。「まず一発で確認する」の最後の行をもう一度打つ。アップデートより前に起動したものは、全部古い Node で動いている。 Claude Code(ターミナル)→ /exit して起動し直す。裏の MCP サーバーも新しい Node で起動し直す Claude デスクトップアプリ・VS Code・Cursor → これらも MCP サーバーを起動している。ウィンドウを閉じるだけでなく、⌘Q(Windows はタスクトレイから終了)で完全に終了してから開き直す dev サーバー → Ctrl+C で止めて、もう一度起動 最後に、もう一度プロセスを確認する。自分で入れた Node のプロセスに、アップデートより前の起動時刻が残っていなければ、B は完了だ(アプリ同梱のものは残っていい)。 Node を同梱しているアプリ 自分で入れた Node とは別に、アプリが自前の Node を抱えていることがある。自分の Mac で、10月23日に見た版はこうだった。 アプリ 中の Node の版 Cursor の CLI(cursor-agent) v26.8.1 → 更新後 v26.12.1 Antigravity(Electron) v24.20.0 Grok Bot(SpaceXAI と Cursor が出しているアプリ。署名は Cursor の会社の Anysphere。Electron) v24.19.0 Claude デスクトップアプリ(Electron、更新版 3.6556.1) v24.22.0 ChatGPT デスクトップアプリ(中の補助ツール) v24.21.0(アプリ更新後も同じ) 版が修正前でも、そのアプリで攻撃が届くとは限らない。外から来た Brotli データをその Node で展開する場面があるかは、確認できていない。 Electron(VS Code、Cursor、Antigravity、Slack などの土台)は、10月23日時点の最新リリース(v45.0.0、10月21日)でも中の Node は 24.22.0 で、修正版ではなかった。 Cursor CLI 以外の同梱 Node は、こっちでは直せない。アップデートが来たら、すぐ入れる。それだけ。 Codex CLI は本体が Rust 製で、今回は関係ない。npm で入れた場合も、入口の小さなスクリプトが Node で動くだけだ。 C:公開しているアプリ 本番がどこで動いているかで変わる。 実行環境 自動で直る? やること Vercel 管理ランタイムに順次展開中。WAF ルールも入った Node 20 を使っているなら手動で移行。WAF は外向きの fetch() のレスポンスまでは守れない AWS Lambda 既定(Auto モード)なら自動で段階適用 Manual / Function update モードやコンテナイメージなら、再デプロイ・再ビルド Cloud Run(関数として、または --base-image 指定でソースからデプロイ) 自動ベースイメージ更新が有効なら反映される 設定を確認。今回の版の反映告知はまだ見つからなかった Cloud Run(自分の Dockerfile) 直らない 下の Docker と同じ。作り直して再デプロイ Firebase Functions 第2世代は Cloud Run の関数と同じ仕組みで、自動更新が既定で有効のはず コンソールでランタイムを確認し、心配なら再デプロイ Cloudflare Workers / Firebase Hosting(静的) 本番は Node で動いていない ビルドに使う Node だけ上げる Docker 公式イメージ node:22 / 24 / 26 は更新済み イメージを作り直して再デプロイ。node:20 は更新されない GitHub Actions setup-node の配布元には登録済み check-latest: true にするか、バージョンを固定で書く。ランナーのキャッシュに古い版が残っていることがある 自前サーバー 直らない B と同じ手順で更新して、プロセスを再起動 Docker は見落としやすい。FROM node:24 と書いてあっても、ビルドし直さないと古いイメージのままだ。 D:Node 20 以前を使っている Node 20 は2026年4月30日にサポートが終わっている。18・23・25 も終わっている。今回の修正は出ないし、今後も出ない。 Homebrew の node@20 は、10月28日に使えなくなる予定だ。 22 系か 24 系(どちらも長期サポート。26 系も10月28日に長期サポートに入る予定)に移す。破壊的変更があるので、テストを回しながら進める。今日すぐ終わる作業ではないので、それまでは「外部から来たデータを展開する処理」を止められないか考えておく。 確認コマンドと完了の判断は、教材にもまとめた。 nekoai-lab.github.io 時系列で見る 日時(日本時間) 出来事 2026年2月27日 Google の brotli リポジトリに、今回の修正のもとになるコミットが入る 10月14日 Node.js が「21日以降にセキュリティリリースを出す」と予告 10月21日 12時ごろ Claude Code 2.1.306 公開 10月21日 19時38分 Node.js v22.23.4 / v24.22.1 / v26.12.1 公開 10月22日 0時47分 最初の PoC リポジトリが GitHub に作られる 10月22日 4時27分 Google brotli が v1.2.1 / v1.1.1 / v1.0.10 を公開 10月22日 11時ごろ Bun が Brotli の修正をマージ 10月22日 13時半ごろ Claude Code 2.1.308 公開 10月22日 午後 Homebrew の node / node@24 / node@22 の修正版が配布される 10月22日 19時ごろ Bun v1.4.4 リリース 10月22日 23時ごろ CISA の評価は「悪用は確認されていない」 いくつか補足。 Brotli のバグは Node 固有じゃない。Google の brotli ライブラリ(1.0.3〜1.2.0)のバグで、CVE の採番も Google だ。CVSS 4.0 では 9.2(Critical)と付いていて、Node 側の評価は High。Brotli を使っている他のソフトも、同梱しているバージョンしだいで影響を受ける。 Node の発表では、Node への報告者として OpenAI の Codex Security チームの名前が載っている。上流の修正は2月に Google の開発者が入れていた。誰が最初に見つけたのかは、どの一次ソースにも書かれていない。 修正のもとになるコードは2月に brotli のリポジトリに入っていた。ただ、そのときはセキュリティ修正として出ていない。セキュリティ修正として世に出たのは10月21日の Node が最初で、brotli 自体のリリースはその翌日だった。 やった結果(実録) 対応は10月23日の朝の数時間。Mac 2台と本番4本。 対象 前 後 Mac mini の Node(Homebrew) v26.10.0 v26.12.1 Mac mini の Claude Code 2.1.306 2.1.308 Mac mini の Cursor CLI 同梱の Node v26.8.1 v26.12.1 Mac mini の Claude デスクトップアプリ 3.1623.4 3.6556.1(自動で更新。内蔵の Claude Code は 2.1.308) Mac mini の起動しっぱなしの Node 19個(最初のコマンドでは16個しか見えなかった) dev サーバー14個を止めた(親のプロセスも含めて15個を kill)。Claude アプリの MCP 1個はアプリの再起動で消えた。残りの MCP 4個は Remote Control を起動し直して消す MacBook Pro の Claude Code 2.1.283(9月26日の版) 2.1.308 MacBook Pro の Node v24.14.0(公式 pkg) Homebrew の v26.12.1 に切り替え MacBook Pro の起動しっぱなしの Node(全部 MCP サーバー) 11個(うち5個は9月19日から) 0個 本番(Cloud Run 4本) node:20 1本、node:22 3本 全部 22.23.4 で作り直してデプロイ。版チェック入り ChatGPT・Antigravity・Grok Bot の同梱 Node 修正前 アプリの更新待ち MacBook Pro はひどかった。 Claude Code は1か月前の版。Node で動いていた MCP サーバー11個のうち5個は、1か月以上前の9月19日から動き続けていた。その中には、ブラウザでページを取りに行く playwright-mcp もいた。今回のバグにいちばん当たりやすい種類だ。 Mac を閉じずにスリープで使い続けていると、こうなる。自動更新は「次に起動したとき」にしか効かない。 再発防止:「入れた」と「動いている」の差を仕組みで埋める 今回の穴は、どれも同じ形をしていた。 Node は上げた。でも動いているプロセスは古いまま Claude Code は上げた。でも常駐している親は古いまま Dockerfile は合っている。でも本番のイメージは作り直していない 自動更新はある。でも閉じないから効かない 人が気をつけて防ぐのは無理だと思った。なので仕組みにした。 1. Node の入れ方を全部の Mac で揃えた Mac mini は Homebrew、MacBook Pro は nodejs.org の公式インストーラーだった。入れ方が違うと、更新の手順も違う。だから後回しになる。 MacBook Pro を Homebrew に切り替えた。npm ls -g --depth=0 で、公式インストーラー側に自分で入れたツールが無いことを確かめてから。 以下は Apple Silicon の Mac(Homebrew が /opt/homebrew)で、公式インストーラーから乗り換える場合だ。Intel Mac は Homebrew 自体が /usr/local に入るので、この rm を打つと Homebrew の Node まで消える。先に brew --prefix が /opt/homebrew と出ること、ls -l /usr/local/bin/node が Cellar を指していないことを確かめる。 brew install node 公式インストーラーの Node を消す(npm -g で入れたものがあれば、先に控えておく) sudo rm -rf /usr/local/bin/node /usr/local/bin/npm /usr/local/bin/npx /usr/local/bin/corepack \ /usr/local/lib/node_modules/npm /usr/local/lib/node_modules/corepack \ /usr/local/include/node /usr/local/share/doc/node /usr/local/share/man/man1/node.1 ターミナルを開き直して which -a node # /opt/homebrew/bin/node だけになれば OK これで、どの Mac も brew upgrade node の1行で済む。 2. 本番の Dockerfile に「古い Node なら作らない」を入れた FROM node:22-alpine と書いていても、作り直さなければ古いまま。逆に、キャッシュや取り違えで古いイメージが混ざることもある。 なので、本番のイメージを作るときに Node の版を確かめて、修正前なら止めるようにした。実行ステージの FROM の直後に1行足すだけだ。 FROM node:22-alpine AS runner Node.js 2026-10-21 のセキュリティ修正より前の版では作らない RUN node -e "const m={22:[23,4],24:[22,1],26:[12,1]};const [a,b,c]=process.versions.node.split('.').map(Number);const min=m[a];const ok=a>26||(min&&(b>min[0]||(b===min[0]&&c>=min[1])));if(!ok){console.error('Node '+process.version+' は修正より前か、サポート外');process.exit(1)}" 22.23.4・24.22.1・26.12.1 より前と、20 系などの修正が出ない系列は、ここでビルドが止まる。4本とも入れて、作り直し、デプロイまで通した。 このチェックが効くのは、作り直すときだけだ。作り直していない本番が古いままなのは、これでは分からない。 次は Dependabot に FROM node:.. を見張らせて、新しいイメージが出たら PR が自動で立つようにする(これから)。 3. 週1回、まとめて上げて「古いまま動いているもの」を探す 2つのスクリプトを作った。 weekly-update:Homebrew で入れたもの全部(Node 以外も)、Claude Code、Cursor CLI を上げる。macOS のアップデートが来ていれば知らせる(入れはしない。再起動が要るから) stale-procs:更新したのに、古い版のまま動いているプロセスを探す stale-procs の考え方は単純だ。プロセスの実行ファイルを lsof で調べて、いまの node の実体と違えば古い。Homebrew のものなら、Cellar/<名前>/<版> が opt/<名前> の指している版と違えば古い。Node や Python に限らず、Homebrew で入れたもの全部に使える。 Node だけなら、これで同じことが分かる。 cur=$(realpath "$(command -v node)") for pid in $(pgrep -f 'node|next-server'); do exe=$(lsof -a -p "$pid" -d txt -Fn 2>/dev/null | sed -n 's/^n//p' | head -1) case "$exe" in /Cellar/node/bin/node|/usr/local/bin/node|/.nvm//bin/node) [ "$(realpath "$exe" 2>/dev/null || echo "$exe")" != "$cur" ] && echo "$pid 古い Node: $exe" ;; esac done next-server のように名前を変えているプロセスも、実行ファイルで見るので拾える。アプリ同梱の Node は、自分では直せないので数えない。 ただし、これで分かるのは Homebrew と nvm で入れた Node だけだ。公式インストーラーの Node は同じ場所に上書きされるので、この比べ方では新旧を見分けられない。fnm・Volta・mise も、この短い版では対象にしていない。その場合は、プロセスの起動時刻が Node を上げた時刻より前かどうかで判断する。 結果はスマホに通知する。ただ、普段から通知は短すぎて読めていなかった。「更新されたな」と分かるだけで、何をすればいいかは分からない。なので、通知だけで次の行動が決まる形にした。 古い版のまま動いているもの 9 件 ・Remote Control・アプリから起動したセッション 4件(claude 2.1.292)  → 親(Remote Control)を作り直すか、そのセッションを閉じる ・MCP サーバー 4件(mcp-pdf-server/node 26.10.0_1)  → 起動したアプリやセッションを開き直す ・Remote Control の親 1件(claude 2.1.292)  → tmux のセッションを作り直す 4. 通知に「プロセスの引数」を出してはいけなかった このスクリプトは Claude Code で書いて、レビューは別の AI(Codex)にさせている。そのレビューで2回止められた。 1回目は、通知にプロセスのコマンドをそのまま載せていた。node app.js --password xxx のような起動のしかたをしていたら、パスワードがログとスマホの通知に流れる。 2回目は、それを直したつもりで「引数のうち、ハイフンで始まらない最初のもの」をスクリプト名として出していた。node -e 'key="..."' のように中身を直接渡すと、そのコードが名前として出る。 最後は「実在するファイルのときだけファイル名を出す。それ以外は node」にして通った。 プロセスの一覧を通知やログに出すスクリプトは、引数を出した時点で秘密が漏れる道になる。自分のレビューだけだったら、2回とも素通りしていたと思う。 5. 片付けをどこまで自動にするか(これから) 通知が来ても、止めるのが人の手作業なら、結局また溜まる。かといって、全部を自動で止めると作業中の dev サーバーやセッションが切れる。なので3段階に分けた。 段階 対象 誰が 全自動 起動した元がもういなくて取り残された古いプロセス。使われていないときの Remote Control の親 週1回の自動実行。止めたものは通知で報告 ひと言で 開いているセッションの MCP、dev サーバー 通知を見て、AI に「古いの片付けて」と頼む。一覧を見せて確認してから止める 人が決める デスクトップアプリ、macOS のアップデート 自分。通知に「何をすればいいか」が書いてある MacBook Pro の11個(うち5個は9月19日から)は、たぶん「全自動」で消える種類だった。これを作れば、今回の後片付けの大半は、寝ている間に終わる。 この部分は、設計まで書いて Codex に引き継いだ。 32リポジトリぶんの依存を、そのあとどう見回るようにしたかは、続きに書いた。 zenn.dev まとめ AI ツールを使っている人:claude update、Cursor CLI、デスクトップアプリを最新に。開き直す Node が入っている人:Node を上げて、動いているものを全部再起動。アプリ同梱の Node はアプリの更新で 公開している人:本番の実行環境を確認して、再デプロイ。Docker は作り直す Node 20 以前の人:今回は直らない。乗り換える 全員:「入れた」と「動いている」の差は、気合いでは埋まらない。週1回の更新と、古いまま動いているものの検出を仕組みにしておく アップデートは、インストールした時点では終わらない。 古いプロセスを止めた時点で、やっと終わる。 参考 Node.js — October 2026 Security Releases google/brotli v1.2.1 CVE-2026-111497(CVE.org API) oven-sh/bun #46352 — Brotli の脆弱性 Bun v1.4.4 ikow/brotli2crash — PoC と解析(実質 DoS とする例) hypnguyen1209/CVE-2026-111497 — Express を使った PoC Claude Code — セットアップ(ドキュメント) anthropics/claude-code — Releases expressjs/body-parser — read.js Electron v45.0.0 SpaceXAI and Cursor Launch Grok Bot Agent App in Beta(AI Weekly) Vercel — Node.js security advisory AWS Lambda — ランタイムの更新 Cloud Run — 自動ベースイメージ更新 actions/setup-node — check-latest Node.js リリーススケジュール

    4 likes
Trending awards, every completed day and week
Gold
01st place finishes
Silver
02nd place finishes
Bronze
03rd place finishes
Awarded repositories
0Owned by ikow now

No trending awards yet

None of the repositories ikow owns has finished in the top three of a completed trending day or week, by stars, forks or PR authors. See who is trending now.

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.