PHP2Shellアップデート後のパッチに対するissueもありそうなので、設定とモニタリングの強化が必要ですね。
短い #PHP2Shell 着弾発見ガイドを共有します。
error.logに対して、この検索を実行します。 ファイル名は、調べたい期間のログのコピーに置き換えてください。.gzも指定できます。
zgrep -HnEi 'Allowed memory size.*exhausted|Unknown on line 0|SIGSEGV|Segmentation fault|zend_mm_heap corrupted|exited on signal 11' error.log*
・PHPのメモリ上限(memory_limit)を超えたエラー:
最も重要な指標。特にリクエスト処理のごく初期で発生した場合に注意
・「Unknown on line 0」という文字列: スクリプトの実行前(リクエスト初期化段階)でFatalエラーが出たときに出やすい特徴的な表記。PHP2Shellの攻撃試行でよく見られる。
・SIGSEGV , Segmentation fault セグメンテーションフォルト(不正なメモリアクセスによるクラッシュ): → PHPプロセスやFPMワーカーが落ちたときに出る も同様。
・zend_mm_heap corrupted: PHPのメモリマネージャ(Zend Memory Manager)が壊れたことを示すメッセージ: メモリ破壊系の脆弱性(OOM corruption)で出やすい
・exited on signal 11 PHP-FPMなどのワーカープロセスがシグナル11(SIGSEGV)で終了した記録
access.logに対しても、この検索を実行します。
zgrep -HnEi 'POST /(wp-admin/admin-ajax\.php|wp-cron\.php|xmlrpc\.php|/api/|/upload|/import|/media)' access.log* | \ grep -E ' (5[0-9]{2}) | [0-9]{6,}'
・POST でステータスが 500/502/503: OOMやクラッシュの結果である可能性
・アップロードを受けないパスへの POST/, /api/, /login などへのmultipartリクエストサイズが大きい(数百万バイト以上): メモリ圧迫を狙ったもの
・同一IPから短時間に多数のPOST: 試行錯誤の痕跡
attending @offensive_con
Agenda for OffensiveCon Tokyo 2026 is live!
Explore the talks and plan your schedule now:
offensivecon.jp/agenda/2026.…
#OffensiveCon #Tokyo
まあこう言っときゃだいたい当たる時代な
【速報】PHP級以上の重大な欠陥の公表を予告、米クラウドフレアCEO
・今後数週間〜数カ月に複数公表されるのは「ほぼ確実」と説明
・別ソフトの欠陥について、すでに事前情報を把握
Readers added context they thought people might want to know
Cloudflare CEOの発言はReutersインタビューで他の重要ソフトの深刻脆弱性を認識しAIで今後多発予測した一般論で、PHP級以上の特定欠陥公表を予告したものではありません。
thehindubusinessline.com/info-tech/ai-d…
secnews.gr/en/743113/clou…
金曜の午後は、整理したり宿題をこなしたり翌週のための作戦を組み直すためにあるのであって新たなことにチャレンジするためには使わないほうが生産性上がるよね
毎週そう心がけている
金曜午後のミーティングで決まったことはたいてい実現されない
オカダリョウタロウ retweeted
これまで「蓋」がされてた(ように錯覚されていた)パンドラの箱が一気に開いてしまい、今は「(長年の)膿を出す辛抱の期間」と信じたい。。 これまでサイバーセキュリティの現場が悶々としていた課題に一気に向き合ってる日本中の企業と経営層が、ひと皮むけて脱皮した姿を数ヶ月後に見たい、という気持ちでいます。
違うんです。みんなが気にしていなかっただけで、ウェブサーバやその上で動くウェブアプリケーションに携わる人達は、これまでずっと脆弱性と戦ってきたんです。
日々、脆弱性が報告され、そのたびに自分達のシステムへの影響の有無を判定し、影響があればパッチを当ててアップデートする。ログを監視し、アタックがあればブロックし、バグがあれば修正し、そしてまた次の報告が来る。何も起きない日は誰にも気付かれないし、褒められもしない。それでもインターネットが動き続けてきたのは、完璧なプログラムがあったからじゃなくて、壊れるそばから直し続けてきた人達がいたからなんです。
ただ AI の登場で、脆弱性を見つけて突くスピードが一気に上がって、直すスピードより壊すスピードの方が速くなってしまっただけなんです。
これからは、サーバアプリケーションを作る人達も AI を使って直すスピードを上げ、先を予見して穴を塞いでいかなければなりません。今はちょうどその過渡期なのです。
私は50年近くプログラミングをやってきたけれど、脆弱性のないプログラムを書くことは難しく、自分の技術力では到底たどり着けない領域だと感じていた。
それでも、世界には自分など及びもつかないほど頭のいい人たちが大勢いて、そういう人たちが書いた堅牢で美しいプログラムによって、インターネットという巨大な仕組みが支えられているのだろうと、どこか楽観的に信じていた。
自分にはできなくても、きっと誰かにはできるのだろうと、長いあいだ思っていたのである。
しかし、今日の騒動を見ていると、どうやらそうでもなかったらしい。
人類は月に人を送り、何十億もの人々が瞬時につながる世界を作り上げ、ついには人間のように言葉を操るAIまで生み出したというのに、それらを支えるプログラムから脆弱性をなくすという、一見ささやかな願いさえ、いまだに叶えられずにいる。
人類には、脆弱性のないプログラムを書くことは、まだ難しすぎた。
今日ぐらいは、そんなクソデカ主語で語っても許されるだろうか。
まあ、そうなりますよね
しばらくは
🚨 UPDATE: PHP 8.5.12 may still be vulnerable to php2shell!
Researchers are reporting a successful double-free trigger on the newly patched release.
⚠️ The official fixes may be incomplete. A crash alone doesn't confirm RCE, but this deserves urgent investigation.
Don't assume you're safe just because you've patched.
#php4shell #php #cybersecurity
xitter.cf/_annieversary/status/2…
PHP2Shell 着弾発見ガイド(実務反映版)出すよー
■ error.log
```
zgrep -HnEi 'Allowed memory size.*exhausted|Unknown on line 0|Out of memory|SIGSEGV|Segmentation fault|zend_mm_heap corrupted|exited on signal 11' error.log*
```
■ access.log
```
# 5xxを返したPOSTをIPごとに集計(パスで絞らない)
zgrep -HnE 'POST ' access.log* | grep -E ' (500|502|503) ' | awk '{print $1}' | sort | uniq -c | sort -nr
```
■ ポイント
・発火がアプリより前なので、パスで絞らない方が漏れにくい
・標準ログの大きい数字は「応答サイズ」。リクエストサイズは %I や $request_length を足さないと残らない
・暫定で memory_limit=-1 にした環境では "Out of memory" も検索対象
・ここで見えるのは「試行」まで。着弾確認は以下も見る
■ 着弾確認
```
# php-fpm / apache2 からシェルが起動していないか
ps aux | grep -E 'php-fpm|apache2|httpd' | grep -v grep
# Webルートに新しい .php が増えていないか
find /var/www /www /srv -name '*.php' -mtime -1 2>/dev/null
```
#PHP2Shell
リョウタロウさんのPHP2Shellの着弾確認ガイド、error.logで「Unknown on line 0」まで拾っているのが、アプリより前の起動段階で落ちるこの脆弱性の性質に合っていて、ありがたい整理です。ありがとうございます。
手元で式を試したので、補足です。
・access.logの式は /api/ などの候補が「/」始まりのため、POST //api/ にしか一致しませんでした。先頭の / を外すと拾えます
・6桁以上の数字は標準形式だと応答サイズです。リクエストサイズは %I や $request_length を足さないと残りません
・発火がアプリより前なので、パスで絞らず、5xxを返したPOSTをIPごとに数える方が漏れにくいと思います
・暫定策で memory_limit=-1 にした環境では、Out of memory も検索語になります
ここで見えるのは試行までなので、apache2やphp-fpmからのシェル起動、Webルートに増えた .php も合わせて見たいところです。
ディストリ版は版数据え置きで修正が入るので、確認はchangelogで。設定とモニタリングの強化、同感です。
補足で使った式です(combined形式のaccess.logを想定)。
zcat -f access.log* | awk '$6=="\"POST" && $9 ~ /^5/ {print $1}' | sort | uniq -c | sort -rn | head -20
error.log側は元の式に Out of memory を足すだけで、memory_limit=-1 の環境もカバーできます。
我が社はどうなんだ!?と尋ねられたみなさまに
#PHP2Shell 着弾可能性を調べる短いガイドです
PHP2Shellアップデート後のパッチに対するissueもありそうなので、設定とモニタリングの強化が必要ですね。
短い #PHP2Shell 着弾発見ガイドを共有します。
error.logに対して、この検索を実行します。 ファイル名は、調べたい期間のログのコピーに置き換えてください。.gzも指定できます。
zgrep -HnEi 'Allowed memory size.*exhausted|Unknown on line 0|SIGSEGV|Segmentation fault|zend_mm_heap corrupted|exited on signal 11' error.log*
・PHPのメモリ上限(memory_limit)を超えたエラー:
最も重要な指標。特にリクエスト処理のごく初期で発生した場合に注意
・「Unknown on line 0」という文字列: スクリプトの実行前(リクエスト初期化段階)でFatalエラーが出たときに出やすい特徴的な表記。PHP2Shellの攻撃試行でよく見られる。
・SIGSEGV , Segmentation fault セグメンテーションフォルト(不正なメモリアクセスによるクラッシュ): → PHPプロセスやFPMワーカーが落ちたときに出る も同様。
・zend_mm_heap corrupted: PHPのメモリマネージャ(Zend Memory Manager)が壊れたことを示すメッセージ: メモリ破壊系の脆弱性(OOM corruption)で出やすい
・exited on signal 11 PHP-FPMなどのワーカープロセスがシグナル11(SIGSEGV)で終了した記録
access.logに対しても、この検索を実行します。
zgrep -HnEi 'POST /(wp-admin/admin-ajax\.php|wp-cron\.php|xmlrpc\.php|/api/|/upload|/import|/media)' access.log* | \ grep -E ' (5[0-9]{2}) | [0-9]{6,}'
・POST でステータスが 500/502/503: OOMやクラッシュの結果である可能性
・アップロードを受けないパスへの POST/, /api/, /login などへのmultipartリクエストサイズが大きい(数百万バイト以上): メモリ圧迫を狙ったもの
・同一IPから短時間に多数のPOST: 試行錯誤の痕跡
一番短いPHP2Shell着弾発見ガイド:
error.logに対して、この検索を実行します。 ファイル名は、調べたい期間のログのコピーに置き換えてください。.gzも指定できます。
zgrep -HnEi 'Allowed memory size.*exhausted|Unknown on line 0|SIGSEGV|Segmentation fault|zend_mm_heap corrupted|exited on signal 11' error.log*
#PHP2Shell
access.logに対しても、この検索を実行します。
zgrep -HnEi 'POST /(wp-admin/admin-ajax\.php|wp-cron\.php|xmlrpc\.php|/api/|/upload|/import|/media)' access.log* | \
grep -E ' (5[0-9]{2}) | [0-9]{6,}'
・POST でステータスが 500/502/503: OOMやクラッシュの結果である可能性
・アップロードを受けないパスへの POST/, /api/, /login などへのmultipartリクエストサイズが大きい(数百万バイト以上): メモリ圧迫を狙ったもの
・同一IPから短時間に多数のPOST: 試行錯誤の痕跡













