PHPè匱æ§php2shellãæŽæ°åã®å¯Ÿç7ã€
2026 幎 10 æ 21 æ¥ãPHP ã«ä»»æã³ãŒãå®è¡ã®è匱æ§ã 2 ä»¶å ¬è¡šãããŸãããéç§° php2shellïŒCVE-2026-109618 / CVE-2026-109619ãCVSS v4.0 9.2ïŒã§ãã
æ¬åœã®å¯Ÿçã¯ãä¿®æ£çãžã®æŽæ°ã§ãã
ãã ãæ€èšŒãç§»è¡ã®éœåã§ããã«ã¯äžããããªãç°å¢ããããŸããä¿®æ£çãåºãªã PHP 7.4 ã§åããŠããæ¬çªãªãããªãããã§ãããã®èšäºã¯ãæŽæ°ãããŸã§ã®éã«ãã£ãŠãããæ«å®å¯Ÿçããphp.net ã®åç¥ãäžæ¬¡è³æã«ã㊠7 ã€ã«ãŸãšãããã®ã§ãããããããäœãé²ããäœãé²ããªãããã䞊ã¹ãŸãã

php2shell ã§äœãèµ·ããã®ã
php.net ã«ãããšã圱é¿ãåããã®ã¯ãWeb ãªã¯ãšã¹ããåŠçãããã¹ãŠã® PHPãã§ããPHP-FPMãApache ã® mod_phpãphp-cgiãFrankenPHPãLiteSpeed ãæãã£ãŠããŸããæããªã¹ã¯ãé«ãã®ã¯ mod_php ã§ããã¢ããªã®ã³ãŒããåãåã«ãæªèªèšŒã®ãªã¯ãšã¹ã 1 æ¬ã§æ»æãæç«ããå®èšŒããããšãããŠããŸãã
2 ä»¶ã®äžèº«ã¯æ¬¡ã®ãšããã§ãã
| CVE | äžèº«ïŒphp.net ã®èª¬æãèŠçŽïŒ |
|---|---|
| CVE-2026-109618 | ã¡ã¢ãªäžè¶³ã®åŠçãããªã¯ãšã¹ãã®å éšããŒã¿ãåæåãããåã® PHP ãäžæããããåŸçä»ãããã®äžæ£ãªããŒã¿ãæ£ãããã®ãšããŠæ±ã£ãŠããŸã |
| CVE-2026-109619 | ãªã¯ãšã¹ããæã£ãŠããå éšç¶æ ããã¡ã¢ãªãè§£æŸããåŸãæ®ããåãã¯ãŒã«ãŒã次ã®ãªã¯ãšã¹ããåŠçãããšããåæåããå ã«ãã®å€ãç¶æ ã䜿ã£ãŠããŸã |
Sansec ã®åæã§ã¯ãæ»æè
ãåŸããã®ã¯ 2 ã€ã§ãããã°ã€ã³äžèŠã®ã³ãŒãå®è¡ãšãHeartbleed ã®ãããªã¡ã¢ãªã®äžèº«ã®æŒããã§ããåŸè
ã§ã¯ãä»ã®å©çšè
ã®ãªã¯ãšã¹ãã«å«ãŸãããã¹ã¯ãŒãã»ã»ãã·ã§ã³ããŒã¯ã³ã»API ããŒãæŒããããšãããŠããŸããSansec ã¯ãæ¢ç¥ã®çºåçµè·¯ã¯ãã¹ãŠ multipart/form-data ã®ãªã¯ãšã¹ãããšãæžããŠããŸãã
å ¬åŒã®çµè«ïŒå®å šãªç·©åçã¯ãªã
å ã«çµè«ãæžããŠãããŸããphp.net ã®åç¥ã¯ããèšãåã£ãŠããŸãã
There are no complete mitigations, updating is the only safe choice.
以äžã® 7 ã€ã¯ãæŽæ°ãŸã§ã®æéã皌ãããã®ãã®ã§ãã
å šéšå ¥ããŠããå®å šã«ãªã£ãããšã¯èšããŸããã
ä¿®æ£çã®ç¶æ³ã¯æ¬¡ã®ãšããã§ãã
| 系統 | ç¶æ³ |
|---|---|
| 8.2 / 8.3 / 8.4 / 8.5 | ä¿®æ£çããïŒ8.2.35 / 8.3.36 / 8.4.27 / 8.5.12ïŒ |
| 7.4 / 8.0 / 8.1 | PHP ãããžã§ã¯ããšããŠã®æŽæ°ã¯çµäºããœãŒã¹ã«åœãŠãæå°éã®ããã¯ããŒãã®ã¿å ¬é |
æŽæ°åã«ãã£ãŠãããæ«å®å¯Ÿç 7 ã€
1. session.upload_progress.enabled ã 0 ã«ããïŒCVE-2026-109619ïŒ
php.net ã CVE-2026-109619 ã®ãç¢ºèªæžã¿ã®ã»ãã·ã§ã³çµç±ã®çµè·¯ããé²ãçãšããŠæããŠãããã®ã§ãã
; /etc/php.d/99-php2shell-mitigation.ini
session.upload_progress.enabled = 0
FPM ã®ããŒã«èšå®ã§å ¥ãããªã次ã®ããã«æžããŸãã
; /etc/php-fpm.d/www.conf
php_admin_flag[session.upload_progress.enabled] = off
泚æç¹ã 2 ã€ãããŸãã
ini_set()ã FPM ã®.user.iniã§ã¯å¹ããŸããã ãªã¯ãšã¹ãã®è§£æããåã«é©çšããã php.iniã»ããŒã«èšå®ã»ãµãŒããŒèšå®ã§å ¥ããŸã- å šã¯ãŒã«ãŒã®åèµ·åãèŠããŸã
é²ããã®ã¯ç¢ºèªæžã¿ã®çµè·¯ã ãã§ããphp.net ããä»ã®å€çš®ã¯é²ããªãããšæžããŠããŸãã
2. memory_limit ã -1 ã«ããïŒCVE-2026-109618ïŒ
CVE-2026-109618 ã¯ãPHP ã®ã¡ã¢ãªäžéã«éãããšãã®åŠçãå ¥å£ã§ããphp.net ã¯ãäžéãã®ãã®ãå€ãèšå®ãæããŠããŸããã¢ããªããäžæžããããªã圢ã§å ¥ããŸãã
; FPM ããŒã«
php_admin_value[memory_limit] = -1
ã»ãã®ããŒã«ã»ãã£ã¬ã¯ããªã»ã¢ããªã®èšå®ããæéã®å€ãå ¥ãçŽããŠããªããã確ãããŸããããã§ããPHP ã®å€åŽã§ã®ã¡ã¢ãªç¢ºä¿ã®å€±æã¯è匱ãªçµè·¯ã«å±ãããããš php.net ã¯æ³šèšããŠããŸãã
äžéãå€ããšã1 æ¬ã®ãªã¯ãšã¹ããã¡ã¢ãªã䜿ãåãå±éºãåºãŸãã
察ç 4 ãšã»ããã§ããå ¥ããŠãã ããã
3. post_max_size ãäžããå ¥å£ã§ãµã€ãºãçµãïŒCVE-2026-109618ïŒ
php.net ã®æšå¥šå€ã¯æ¬¡ã®ãšããã§ãã
| ã¢ã㪠| post_max_size |
|---|---|
| ãã¡ã€ã«ã¢ããããŒããèŠããªã | 8M |
| ã¢ããããŒããèŠã | 32M |
upload_max_filesize 㯠post_max_size ããå°ããããŸãã
php.net ã¯ããã«ãWeb ãµãŒããŒããããã·ã®æ®µéã§ããã³ãŒãåŸã®ãµã€ãºã»å
¥åãã£ãŒã«ãæ°ã»multipart ã®ããŒãæ°ã»ããããŒæ°ã»å
¥ãåã®æ·±ããå¶éããããšãå§ããŠããŸããContent-Length ã䜿ããªããªã¯ãšã¹ãïŒãã£ã³ã¯è»¢éãªã©ïŒã察象ã«å«ããŸããnginx ãªããå°ãªããšãããã£å
šäœã®äžé㯠client_max_body_size ã§çµããŸãã
4. ã³ã³ããã cgroup ã§ã¡ã¢ãªã®äžéãããã
察ç 2 ã§ PHP ã®äžéãå€ããåãå€åŽã«ãå¯çšæ§ã®å£ãã眮ããŸããphp.net ã¯ãåé¡ãèµ·ãããã¯ãŒã«ãŒã ããæ¢ããããªã·ãŒãå§ããŠããŸãã
systemd ã§ php-fpm ãåãããŠãããªããããšãã°æ¬¡ã®ããã«ããŸãã
# systemctl edit php-fpm
[Service]
MemoryMax=4G
OOMPolicy=continue
OOMPolicy ãæžããªããšãã¯ãŒã«ãŒã 1 〠OOM ã§æ¢ããããã ãã§ãµãŒãã¹å
šäœãæ¢ãŸãèšå®ã«ãªãããŸãïŒsystemd ã®æ¢å®å€ã¯ stopïŒã
RLIMIT_AS ã RLIMIT_DATA ã§ä»£çšããŠã¯ãããŸããã php.net ã¯ãããããè匱ãªã¡ã¢ãªç¢ºä¿ã®å€±æãã®ãã®ãåŒãèµ·ãããããšæžããŠããŸãã
5. å ¥å£ã§ multipart ãæ¢ãã
Sansec ã«ãããšãæ¢ç¥ã®çºåçµè·¯ã¯ãã¹ãŠ multipart/form-data ã§ãããã¡ã€ã«ã¢ããããŒããåããªãç»é¢ã«ãŸã§ multipart ãéãçç±ã¯ãããŸãããWAF ããªããŒã¹ãããã·ã§æ¢ãããšãPHP ã«å±ãåã«çµè·¯ãæžãããŸãã

AWS WAF ãªãããContent-Type ã« multipart ãå«ã¿ããã€ã¢ããããŒããèŠããã¹ãã§ã¯ãªãããªã¯ãšã¹ãã Block ããŸãã
{
"Name": "block-multipart-except-upload-host",
"Priority": 0,
"Action": { "Block": {} },
"Statement": {
"AndStatement": {
"Statements": [
{ "ByteMatchStatement": {
"SearchString": "multipart",
"FieldToMatch": { "SingleHeader": { "Name": "content-type" } },
"TextTransformations": [{ "Priority": 0, "Type": "LOWERCASE" }],
"PositionalConstraint": "CONTAINS" } },
{ "NotStatement": { "Statement": { "ByteMatchStatement": {
"SearchString": "admin.example.com",
"FieldToMatch": { "SingleHeader": { "Name": "host" } },
"TextTransformations": [{ "Priority": 0, "Type": "LOWERCASE" }],
"PositionalConstraint": "EXACTLY" } } } }
]
}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "block-multipart-except-upload-host"
}
}
å ¥ããåã«ç¢ºãããããšã 3 ã€ãããŸãã
- æ£èŠã« multipart ãäœ¿ãæ©èœã®æŽãåºãã ãœãŒã¹ã®
FormData/$_FILESãšãã¢ã¯ã»ã¹ãã°ã® POST å ãäž¡æ¹èŠãŸã - é€å€æ¡ä»¶ã®ããæãã Host ããããŒã¯åœè£ ã§ããŸããé€å€ãããã¹ãã® PHP çµè·¯ã IP å¶éãªã©ã§å®ãããŠãããã確ãããŸããè€æ°ãµã€ãã§ 1 ã€ã® Web ACL ãå ±æãããšãå¥ãµã€ãã® ALB ã«ãé€å€ãããã¹ãåããä»ããŠéãã ãã§ããæããŸããACL 㯠ALB ããšã«åããŸã
- å¹ããŠãããã®ç¢ºèªã Block ã«ããããæ¬æã®ãªã GET ã§ Content-Type ã ã multipart ã«ããŠãéçãã¡ã€ã«ã«éããŸããPHP 㯠GET ã®æ¬æãè§£æããªãã®ã§æ¬çªã§ãç¡å®³ã§ã
curl -s -o /dev/null -w '%{http_code}\n' \
-H 'Content-Type: multipart/form-data; boundary=x' \
https://www.example.com/robots.txt
# 403 ã«ãªãã°å¹ããŠãã
é€å€ãããã¹ãã® multipart ã¯éããŸããããã¯å¯Ÿç 1ã4 ã§å®ãããšã«ãªããŸãã
6. PHP 8.5 ã®è¿œå èšå®ãšã蚺æã¡ãã»ãŒãžã®åºã©ããããªããïŒCVE-2026-109619ïŒ
php.net 㯠CVE-2026-109619 ã«ã€ããŠãã»ãã«ã次ãæããŠããŸãã
- PHP 8.5 ãªã
fatal_error_backtraces=0ã«ããŠå šã¯ãŒã«ãŒãåèµ·åãããç¢ºèªæžã¿ã®ãèŽåœçãšã©ãŒã®ããã¯ãã¬ãŒã¹çµè·¯ãã ããé²ã - ãªã¯ãšã¹ãããšã«é©çšããããç¡å¹ãªèšå®ãéæšå¥šã®èšå®ããªããã åæåããåã«èšºæã¡ãã»ãŒãžãåºããã®ã察象ã
error_reportingãdisplay_errorsã@ã§è¡šç€ºãé ããŠãå¹ããªã - æ»æè ãèµ·ãããèŽåœçãšã©ãŒãå®è¡ã¿ã€ã ã¢ãŠããçŽãã ã³ãŒã«ããã¯ãã¢ããããŒããã€ã³ããŒãã®åŠçãåŸçä»ãã§ã®å€±æãå«ã
7. PHP 7.4 / 8.0 / 8.1 ã¯ãããã¯ããŒãã Remi ã®æŽæ°ãå ¥ãã
ä¿®æ£çã®å¯Ÿè±¡å€ã®ç³»çµ±ã«ã¯ãphp.net ããœãŒã¹ã«åœãŠãæå°éã®ããã¯ããŒããå ¬éããŠããŸãïŒ7.4 / 8.0 / 8.1ïŒã
èªåã§ãã«ãããŠããç°å¢åãã§ãã
RPM ã® PHP 7.4 ãªããRemi ã®ãªããžããªïŒrpms.remirepo.netïŒã䜿ã£ãŠããç°å¢ãå€ãã¯ãã§ããphp.net ã®åç¥ã¯ãRemi ã¯ä»æ¥ã¯æŽæ°ãåºãªãããšæžããŠããŸããããå®éã«ã¯ 7.4.33-31 ã 10/21 ä»ãã§å
¬éãããŠããŸããã
# ã¢ãžã¥ãŒã«åœ¢åŒã®å ŽåïŒSCL ãªã 'php74-php*'ïŒ
sudo dnf update 'php*'
# å
¥ã£ããã倿Žå±¥æŽã§ç¢ºããã
rpm -q --changelog php-common | head -5
倿Žå±¥æŽã«æ¬¡ã®è¡ãããã°å ¥ã£ãŠããŸãã
- Mitigation fix Avoid state corruption via bailout
CVE-2026-109618, CVE-2026-109619
æžãæ¹ã¯ãMitigation fixïŒç·©åçïŒãã§ãã8.x ã®ä¿®æ£çãšåãäžèº«ãã©ããã¯ããã®èšè¿°ããã¯å€æã§ããŸããã
åæ ã¯ 1 å°ãã€ãç¡åæ¢ã§
ini ã®å€æŽã«ã¯ php-fpm ã® reload ãèŠããprocess_control_timeout ãæ¢å®å€ã® 0 ã®ãŸãŸã ãšãreload ã®ç¬éã«åŠçäžã®ãªã¯ãšã¹ãã 502 ã«ãªããŸããããŒããã©ã³ãµãŒã®é
äžãªãã1 å°ãã€å€ããŠåæ ããŸãã
aws elbv2 deregister-targets --target-group-arn "$TG_ARN" --targets Id="$ID"
aws elbv2 wait target-deregistered --target-group-arn "$TG_ARN" --targets Id="$ID"
# 察象å°ã§: èšå®ã眮ã㊠reloadãå€ã確èª
# systemctl reload php-fpm
# php-fpm -i | grep session.upload_progress.enabled
aws elbv2 register-targets --target-group-arn "$TG_ARN" --targets Id="$ID"
aws elbv2 wait target-in-service --target-group-arn "$TG_ARN" --targets Id="$ID"
php-fpm -i ã§èŠããã®ã¯ php.ini åŽã®å€ã§ããããŒã«èšå®ïŒphp_admin_valueïŒã§å
¥ããå€ã¯ php-fpm -tt ã®åºåã§ç¢ºãããŸããAuto Scaling ã§å°ãå
¥ãæ¿ããç°å¢ã§ã¯ãæã§å
¥ããèšå®ã¯æ°ããå°ã«å
¥ããŸãããèµ·åãã³ãã¬ãŒãã AMI ãŸã§çŽããŠå®äºã§ãã
ç§ã®æ¬çªã§ç¢ºãããããš
åœå€ãç§ãä¿å®ããŠãã PHP 7.4 ã®æ¬çªã§ã¯ã察ç 1ïŒsession.upload_progress.enabled=0ïŒãšå¯Ÿç 5ïŒmultipart ã® BlockïŒãå
¥ãã1 å°ãã€ç¡åæ¢ã§åæ ããŸãããWAF ãå
¥ããçŽåŸã«ã¯ãå®éã« multipart ã® POST ãå±ããŠããŸãã5 ãåœã»6 ã€ã® IP ãããåã 2 çš®é¡ã®ãµã€ãºã®ããŒã¿ã§ãUser-Agent ã¯ãã¹ãŠ Python ã® aiohttp ã§ããã
| å±ããæ»æ | çµæ |
|---|---|
| æåã® 1 æ¬ïŒapex ãã¡ã€ã³å®ãŠïŒ | apex â www ã® 301 ãªãã€ã¬ã¯ãã§ POST ã GET ã«å€ãããããŒã¿ãå±ããªãã£ã |
| ãã®åŸã® 5 IP | WAF ã® multipart ã«ãŒã«ã§ Block |

確èªããç¯å²ã§ã¯ãäŸµå ¥ã®çè·¡ã¯ãããŸããã§ããã詳ããæç³»å㯠Qiita ã®èšé²ã«ãããŸãã
è³æãšå®éããºã¬ããšãã
ããã¯æé æžã«ã¯åºãŠããªããèžãã§ããåãã£ã話ã§ãã
| ãºã¬ | å®é |
|---|---|
| php.netãRemi ã¯ä»æ¥ã¯æŽæ°ãåºãªãã | åãæ¥ã®ãã¡ã« 7.4.33-31 ãåºãŠãããRemi ã®ããã°ã«åç¥ãåºãåã«ããªããžããªã«ã¯äžãã£ãŠãã |
| WAF ã Count ãã Block ã«åãæ¿ãããæ¢ãŸãã¯ã | get-web-acl ã®åºåããã®ãŸãŸ update-web-acl ã«æ»ããšãæ€çŽ¢æååãäºéã« base64 åãããmultipart ã§ã¯ãªã bXVsdGlwYXJ0 ãæ¢ãã«ãŒã«ã«ãªã£ãããšã©ãŒã¯åºãªã |
| ãããŒãžãã«ãŒã«ãå ¥ããã°å®å¿ | CommonRuleSet ã® NoUserAgent_Header ãããã€ãã£ãã¢ããªã WebSocket ã®æ£åžžãªéä¿¡ã«å€§éã«äžèŽããããããªã Block ã«ãããšã¢ããªãæ¢ãŸã |
WAF ã®ã«ãŒã«ãå€ããããæ€çŽ¢æååããã³ãŒãããŠç¢ºãããcurl ã§ 403 ã«ãªãããŸã§èŠãããšãå§ããŸãã
aws wafv2 get-web-acl --scope REGIONAL --name "$ACL_NAME" --id "$ACL_ID" \
| jq -r '.WebACL.Rules[0].Statement.AndStatement.Statements[0]
.ByteMatchStatement.SearchString' | base64 -d
# multipart ãšåºãã°æ£ãã
é²ããªããã®ãšãå ¥ãããŠããªããã®ç¢ºèª
7 ã€ãå ¥ããŠãæ®ããã®ã䞊ã¹ãŸãã
| æ®ããã® | çç± |
|---|---|
| ç¢ºèªæžã¿ä»¥å€ã®å€çš® | 察ç 1ã»6 㯠php.net èªèº«ããç¢ºèªæžã¿ã®çµè·¯ã ãããšæžããŠãã |
| æ£èŠã« multipart ãåããç»é¢ | 察ç 5 ã§é€å€ãããã¹ãã«ã¯å±ã |
| PHP ã®å€åŽã®ã¡ã¢ãªç¢ºä¿ã®å€±æ | 察ç 2 ã§ãè匱ãªçµè·¯ã«å±ããã |
| ãã§ã«å ¥ãããŠããå Žå | æ«å®çã¯å ¥å£ããµããã ããä»èŸŒãŸãã Web ã·ã§ã«ã cron ã¯æ®ã |
æåŸã®è¡ã®ããã«ãå ¥ãããŠããªããã確ãããŸãã

- php-fpm ã®ã¯ãŒã«ãŒã®ç°åžžçµäºïŒsignal 11 ãªã©ïŒãå¢ããŠããªãã
- ã¡ã¢ãªäžéã»å®è¡ã¿ã€ã ã¢ãŠãã®ãšã©ãŒãåºãŠããªãã
- php-fpm ã®åããã»ã¹ã«ã·ã§ã«ãªã©ãèµ·åããŠããªãã
- çŽè¿ã§å€æŽããã PHP ãã¡ã€ã«ã»å®è¡ãã¡ã€ã«ããèªåã®ãªãªãŒã¹äœæ¥ã®åã ãã
- cron ã®å€æŽããèŠæ £ããªãå€åãéä¿¡ããªãã
ãã°ãæ¥å¥ã«æ°ãããšãã¯ã21-Oct-2026 圢åŒã®æ¥ä»ãæååã®ãŸãŸäžŠã¹æ¿ããªãã§ãã ãããæã®é ã«ãªãããtail ã§çŽè¿ã®æãèœã¡ãŸããèŠããæã§ grep ããŠããæ°ããŸãã
æŽæ°ã§ããããæ«å®çã¯å€ããŠæ§ããŸãããå€ãåã«ãä¿®æ£çãå ¥ã£ãããšãããŒãžã§ã³ã倿Žå±¥æŽã§ç¢ºãããŠãã ããã
次ã«èªã
- npmãµãã©ã€ãã§ãŒã³æ»æShai-HuludïŒçœ²åæ€èšŒãSBOMãç¡æå³ã ã£ãçç± å ¥å£ããµããã åŸã«æ®ãããŒã·ã¹ã¿ã³ã¹å±€ã®è©±ã§ããäžã®ãã§ãã¯ãªã¹ãã§äœãæ¢ããã®åèã«ãªããŸãã
- sudoersåŒæ°å¶éã®4段é:*ã¯ç©ºçœãè·šã php-fpm ã®ãŠãŒã¶ãŒãä¹ã£åããããšãã«ãã©ããŸã§å±ãã㯠sudo ã®æžãæ¹ã§å€ãããŸãã
- AIã¯ããŒã©ãŒã¯éãbot察çãWAF2段ã®èšèš Cloudflare ã® WAF ã 2 段ã§çµã¿ãæ¢ãããããããšéãããã¯ããŒã©ãŒãåããèšé²ã§ãã察ç 5 ã®ããã«äžåŸã«ã¯æ¢ããããªããšãã®èãæ¹ãšããŠã
References
é¢é£æžç± MCPå®è·µã»ãã¥ãªã㣠MCP ã»ãã¥ãªãã£ã®å®è·µæž | OWASP MCP Top 10ã»æ»æã®å®æŒã»èªèšŒèªå¯ã»æ¬çªã¯ãŒã¯ã¢ã©ãŠã³ã æžç±ããŒãžãèŠã â ãã®èšäºã¯åœ¹ã«ç«ã¡ãŸãããïŒ