æ¬ããã°ã¯ 2026 幎 10 æ 21 æ¥ã«å
¬éããã AWS Blog â Using AWS WAF to apply mitigations for PHP2Shell RCE vulnerabilities (CVE-2026-109618 and CVE-2026-109619) â ã翻蚳ãããã®ã§ãã 2026 幎 10 æ 21 æ¥ãPHP ãããžã§ã¯ãã¯ãPHP ã³ã¢ã©ã³ã¿ã€ã ã«ååšãã 2 ä»¶ã®é倧ãªãªã¢ãŒãã³ãŒãå®è¡ (RCE) è匱æ§ã«å¯ŸããŠ ç·æ¥ã®ä¿®æ£ããªãªãŒã¹ ããŸããããããã®è匱æ§ã¯ CVE-2026-109618 ããã³ CVE-2026-109619 ãšããŠè¿œè·¡ãããŠãããç·ç§°ã㊠PHP2Shell ãšåŒã°ããŠããŸãããããã CVSS v4.0 ã§ 9.2 (Critical: ç·æ¥) ãšè©äŸ¡ãããŠãããèªèšŒãããŠããªãæ»æè
ãè匱ãªãµãŒããŒäžã§ã³ãŒããå®è¡ã§ããŸããä¿®æ£æžã¿ã®ãªãªãŒã¹ã¯ PHP 8.5.12ã8.4.27ã8.3.36ã8.2.35 ã§ãã å®å
šãªä¿®æ£ã¯ãããé©çšä»¥å€ã«ãªããPHP ã®ã¢ããã°ã¬ãŒããæåªå
ã§é²ããå¿
èŠããããŸãããã ãããµãŒããŒã®ããªãŒãå
šäœãžã®ãããé©çšã«ã¯æéãããããŸããPHP ã皌åããŠããå Žæã®æ£åžããã¡ã³ããã³ã¹ãŠã£ã³ããŠã®èª¿æŽãæ°ãããã«ãã§ã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããå¿
èŠã«ãªãããã§ããæ¬èšäºã§ã¯ã AWS WAF ã䜿çšããŠããããé©çšãå®äºãããŸã§ã®éãç¢ºèªæžã¿ã®æ»æçµè·¯ãžã®é²åºãäœæžããæ¹æ³ã玹ä»ããŸãããããã¯ãã¹ããªã¯ãšã¹ããã¿ãŒã³ãAWS WAFv2 ã§ã®ã«ãŒã«ã®èšè¿°æ¹æ³ãæ£åœãªãã©ãã£ãã¯ã«åœ±é¿ãäžããã«ã«ãŒã«ããããã€ããæ¹æ³ã説æããŸãããŸãã誀ã£ãå®å¿æãæ±ããªããããAWS WAF ã«ããä¿è·ã®éçã«ã€ããŠã説æããŸããAmazon ã®è
åšã€ã³ããªãžã§ã³ã¹ãè匱æ§ã®å
¬è¡šåã« PHP2Shell ã®æªçšãã©ã®ããã«æ€åºãããã«ã€ããŠã¯ãã Amazon Threat Intelligence ã PHP2Shell ã®è匱æ§å
¬éåã®æªçšã MadPot ã§ç¹å® ããåç
§ããŠãã ãããAWS ãµãŒãã¹ã®ç¶æ³ãš AWS ãæšå¥šãã AWS WAF ã«ãŒã«ã«ã€ããŠã¯ãã AWS Security Bulletin 2026-143-AWS ããåç
§ããŠãã ããã éèŠ: å®å
šãªä¿®æ£ã¯ãããé©çšä»¥å€ã«ãªããPHP ã®ã¢ããã°ã¬ãŒããæåªå
ã§é²ããå¿
èŠããããŸãã è匱æ§ã®æŠèŠ PHP2Shell ã® 2 ã€ã®è匱æ§ã¯ããããèªèšŒäžèŠã® RCE ã§ãããã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®è¡ãããåã« PHP ã multipart/form-data ãªã¯ãšã¹ã (ãã©ãŠã¶ããã¡ã€ã«ã¢ããããŒãã«äœ¿çšãããªã¯ãšã¹ã圢åŒ) ãåŠçããæ¹æ³ã«èµ·å ããŠããŸãããã®ãããæ¬èšäºã® AWS WAF ã«ãŒã«ã§ã¯ãmultipart ãã©ãã£ãã¯ããªã¯ãšã¹ãæ¬æã®ãµã€ãºãã»ãã·ã§ã³ã¢ããããŒã鲿 (session upload progress) ãã£ãŒã«ãã«çŠç¹ãåœãŠãŠããŸãã倧ãŸãã«èšãã°ãCVE-2026-109618 ã¯ããªã¯ãšã¹ãã®åŠçäžã« PHP ãã¡ã¢ãªäžè¶³ (out-of-memory) ã«é¥ã£ãéã«ã¡ã¢ãªç Žå£ãåŒãèµ·ãããŸããCVE-2026-109619 ã¯ããããªã¯ãšã¹ããæ®ããå€ãããŒã¿ããåãã¯ãŒã«ãŒããã»ã¹äžã®åŸç¶ã®ãªã¯ãšã¹ããåå©çšããŠããŸãè匱æ§ã§ããæ ¹æ¬åå ã®åæã圱é¿ãåããããŒãžã§ã³ãPHP ãããžã§ã¯ãèªèº«ã®ã¬ã€ãã³ã¹ã«ã€ããŠã¯ãPHP ã®å
¬åŒã¢ããã€ã¶ãªãšãªãªãŒã¹ã¢ããŠã³ã¹ãåç
§ããŠãã ããã CVE-2026-109618 (ã¡ã¢ãªäžè¶³ã«ããã¡ã¢ãªç Žå£) â PHP ã¢ããã€ã¶ãª GHSA-w8hw-w9fx-j79w CVE-2026-109619 (å€ãã°ããŒãã«ç¶æ
: stale global state) â PHP ã¢ããã€ã¶ãª GHSA-6wmf-4rv5-p3rp PHP ã»ãã¥ãªãã£ãªãªãŒã¹ã®ã¢ããŠã³ã¹ (2026 幎 10 æ 21 æ¥) 察å¿çã«ããã AWS WAF ã®äœçœ®ä»ã ä»åã®ã±ãŒã¹ã§ã¯ãAWS WAF ã¯å€å±€é²åŸ¡ã®ããã®å¶åŸ¡ã§ãããPHP ã®ã¢ããã°ã¬ãŒãã«ä»£ãããã®ã§ã¯ãããŸãããPHP ã®ã¢ããã€ã¶ãªã§ãããããé©çšæžã¿ã®ãªãªãŒã¹ãžã®æŽæ°ãå¯äžã®å®å
šãªç·©åçã§ãããšæèšãããŠããŸããåŸè¿°ãããšããã2 ã€ã®è匱æ§ã®ãã¡ 1 ã€ã¯ããã®å€§éšåããŠã§ãã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ã§ã¯å¯ŸåŠã§ããªãç¯å²ã«ãããŸããæ¬èšäºã®ã«ãŒã«ã¯ããããé©çšãå®äºãããŸã§ã®éã®é²åºãäœæžããç·©åçãšããŠæ±ãããããé©çšåŸã¯åé€ããããè£å©çãªå¶åŸ¡ãšããŠç¶æããŠãã ããã AWS WAF ã¯ãšããžã§ HTTP ãªã¯ãšã¹ããæ€æ»ããŸããmultipart æ¬æã®å
éšæ§é ã¯è§£æãããPHP ã¯ãŒã«ãŒã®ã¡ã¢ãªããµãŒããŒåŽã®èšå®ãææ¡ã§ããŸãããæ¬¡ã®è¡šã«ãåæ»æèŠçŽ ã«å¯Ÿã㊠AWS WAF ãç·©åçãšããŠæ©èœãããã©ããã瀺ããŸãã æ»æèŠçŽ AWS WAF ã®å¯Ÿå¿ç¯å² multipart POST ã«å«ãŸããã»ãã·ã§ã³ã¢ããããŒã鲿ãã£ãŒã«ã ( PHP_SESSION_UPLOAD_PROGRESS ãPHP ã®ã¢ããããŒã远跡æ©èœãæå¹ã«ãããã©ãŒã ãã£ãŒã«ã) 察å¿å¯èœããã®ãã£ãŒã«ããå«ããªã¯ãšã¹ãã察象ãšããã«ãŒã«ã§ãããã¯ã§ããŸãã multipart ã¢ããããŒãçµè·¯ ( multipart/form-data ããã¡ã€ã«ã¢ããããŒãã«äœ¿çšããããªã¯ãšã¹ãã¿ã€ãã§ãããäž¡æ¹ã®è匱æ§ã®äŸµå
¥å£) 察å¿å¯èœããã ããã¢ããªã±ãŒã·ã§ã³ã«æ£åœãª multipart ã¢ããããŒãããªãå Žåã«éããŸãããããã¯å¯Ÿè±¡: multipart/form-data. ãµã€ãºè¶
éã®æ¬æã«ããã¡ã¢ãªäžè¶³ç¶æ
äžéšå¯Ÿå¿ããªã¯ãšã¹ãæ¬æã®ãµã€ãºã«äžéãèšå®ããŸãããã ããäžéå
ã«åãŸãããããŒå¢å¹
(header amplification: 倿°ã®å°ããªããŒãããããŒã«ãããéä¿¡æã®ãµã€ãºãã¯ããã«äžåãã¡ã¢ãªãæ¶è²»ããããã®) ã¯æ€åºã§ããŸããã åãã¯ãŒã«ãŒ (倿°ã®ãªã¯ãšã¹ãã®åŠçã«åå©çšããã PHP ããã»ã¹) ã«å¯Ÿããç¹°ãè¿ãã®è©Šè¡ 察å¿å¯èœãã¬ãŒãããŒã¹ã®ã«ãŒã«ã«ããããšã¯ã¹ããã€ãã«å¿
èŠãªå€§éã®ãªã¯ãšã¹ãéä¿¡ãæå¶ã§ããŸãã ãããã¥ãŒãµãŒ (producer) ãšããŠæ©èœãã fatal_error_backtraces (ãªã¯ãšã¹ãããŸããã§ã¯ã©ãã·ã¥ãã¬ãŒã¹ã®ç¶æ
ãä¿æãã PHP 8.5 ã®èšå®) 察å¿äžå¯ãããã¯ãµãŒããŒã®æ§æèšå®ã§ã ( fatal_error_backtraces=0 )ã ã³ã³ã·ã¥ãŒã㌠(consumer) ãšããŠæ©èœãããç¡å¹ãŸãã¯éæšå¥šã® INI èšå®ã«é¢ãã蚺æ (äžæ£ãªæ§æèšå®ã®é©çšæã« PHP ãåºåããèŠå) 察å¿äžå¯ããã®çµè·¯ã¯ã¯ã©ã€ã¢ã³ãããã® HTTP éä¿¡ã§ã¯ãªãããµãŒããŒåŽã§å®è¡ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã multipart ã¢ããããŒããåãä»ããªãå Žåã¯ã multipart/form-data ããããã¯ããã«ãŒã«ããšããžã«é©çšããããšã§ãããããã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠæªçšå¯èœãªãmultipart åŠçã§ã¡ã¢ãªäžè¶³ãåŒãèµ·ããæ»æçµè·¯ãšãã»ãã·ã§ã³ã¢ããããŒã鲿ã®ããªã¬ãŒãæé€ã§ããŸããããã¯ããããé©çšæéäžã®å€å±€é²åŸ¡ãšããŠæ©èœããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ multipart ã¢ããããŒãã䜿çšããŠããå ŽåãAWS WAF ã§ãªã¹ã¯ã¯äœæžã§ããŸãããè匱æ§ãè§£æ¶ããããšã¯ã§ããŸãããããããŒå¢å¹
(æ°ãããã€ãã®ããŒãããããŒããPHP å
éšã§ã¯ããã«å€§ããªã¡ã¢ãªã«å±éããããã®) ã¯ãµã€ãºå¶éå
ã«åãŸãããããã¡ã€ã¢ãŠã©ãŒã«ã¯æ¬æã®åããŒãå
ã«ããããããŒãè§£æã§ããªãããã§ãããã®å Žåã¯ãPHP ã®ã¢ããã°ã¬ãŒããåªå
ããåŸè¿°ãããµãŒããŒåŽã®ç·©åçãé©çšããŠãã ããã AWS WAF ã«ãŒã«ã®å®è£
以äžã®ã«ãŒã«ã¯ AWS WAFv2 ã® JSON 圢åŒã§ããåã«ãŒã«ããPHP ã¯ãŒã¯ããŒãã®å段ã«ãã Amazon CloudFront ãã£ã¹ããªãã¥ãŒã·ã§ã³ãApplication Load BalancerããŸã㯠Amazon API Gateway ã¹ããŒãžã«é¢é£ä»ãããã AWS WAF ä¿è·ãã㯠(ãŠã§ã ACL) ã«ãããã€ããŠãã ããã éèŠ: 倿Žãå®è£
ããåã«ãAWS WAF ã®ãã°èšé²ã«é¢ããã¬ã€ãã³ã¹ã«æ²¿ã£ãŠ WAFv2 ã®ãã°èšé²ãèšå®ãããŠããããšã確èªããŠãã ããããã¹ãŠã®ã«ãŒã«ã¯ãŸã Count ã¢ãŒãã§éå§ããæ£åœãªãã©ãã£ãã¯ã«äžèŽããªãããšã確èªããŠãã Block ã«åãæ¿ããŠãã ããã ãªã¯ãšã¹ãæ¬æã®æ€æ»ãµã€ãºå¶é AWS WAF ã¯ããªã¯ãšã¹ãæ¬æãäžå®ã®ãµã€ãºãŸã§æ€æ»ããŸããApplication Load Balancer ãš AWS AppSync ã§ã¯ããã®å¶é㯠8 KB ã§åºå®ãããŠããŸããCloudFront ã API Gateway ãªã©ã® AWS ãµãŒãã¹ã§ã¯ãããã©ã«ã㯠16 KB ã§ã以äžã®ããã«ãŠã§ã ACL ã® AssociationConfig ã䜿çšã㊠32ã48ããŸã㯠64 KB ã«åŒãäžããããšãã§ããŸããæ¬ææ€æ»ãµã€ãºå¶éãè¶
ããéšåã¯ããµã€ãºè¶
éãšããŠæ±ãããŸããæ¬æãµã€ãºã®ã«ãŒã«ã§é©çšã§ããäžéã¯æ€æ»å¯Ÿè±¡ã®ãµã€ãºãŸã§ã§ããããããããã€ããã«ãŒã«ã«åãããŠå¶éãéžæããŠãã ããã aws wafv2 update-web-acl ... --association-config \ 'RequestBody={CLOUDFRONT={DefaultSizeInspectionLimit=KB_16}}' AWS WAF ã«ãŒã« ãã®ã«ãŒã«ã¯äž¡æ¹ã® CVE ã察象ãšãã AndStatement å
ã® 3 ã€ã®æ¡ä»¶ãã¹ãŠ ãåæã«æºããããå Žåã«ã®ã¿ãªã¯ãšã¹ãããããã¯ããŸãã ã¡ãœããã POST ãšå®å
šã«äžèŽãã â HTTP ã¡ãœããã§ç
§å (倿ãªã) PHP ã®ã»ãã·ã§ã³èå¥åãååšãã (ãã¹ãããã OrStatement ã«ãããæ¬¡ã®ããããã®ãµãæ¡ä»¶ãæºããã°æç«) PHPSESSID ã Cookie ã®ããŒãšããŠååšãã (ãã¹ãŠã® Cookie ã察象ã«ãããŒãå®å
šäžèŽã§ç
§å)ããŸã㯠PHPSESSID ããªã¯ãšã¹ãæ¬æã®ããããã®å Žæã«ååšãã (éšåäžèŽ) æ¬æã« PHP_SESSION_UPLOAD_PROGRESS ãå«ãŸãã â PHP ã®ã»ãã·ã§ã³ã¢ããããŒã鲿æ©èœãæå¹ã«ãããã©ãŒã ãã£ãŒã«ã ãã®ã«ãŒã«ãšäœµããŠããµãŒããŒåŽã§ session.upload_progress.enabled=0 ãèšå®ãããã®æ©èœãç¡å¹ã«ããŠãã ããã { "Name": "PHP2Shell", "Priority": 0, "Statement": { "AndStatement": { "Statements": [ { "ByteMatchStatement": { "SearchString": "POST", "FieldToMatch": { "Method": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } }, { "OrStatement": { "Statements": [ { "ByteMatchStatement": { "SearchString": "PHPSESSID", "FieldToMatch": { "Cookies": { "MatchPattern": { "All": {} }, "MatchScope": "KEY", "OversizeHandling": "CONTINUE" } }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } }, { "ByteMatchStatement": { "SearchString": "PHPSESSID", "FieldToMatch": { "Body": { "OversizeHandling": "CONTINUE" } }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "CONTAINS" } } ] } }, { "ByteMatchStatement": { "SearchString": "PHP_SESSION_UPLOAD_PROGRESS", "FieldToMatch": { "Body": { "OversizeHandling": "CONTINUE" } }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "CONTAINS" } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "PHP2Shell" } } æ€èšãã¹ããã®ä»ã® AWS WAF ã«ãŒã« ã¢ããªã±ãŒã·ã§ã³ã§ã¢ããããŒãã䜿çšããªãå Žåã« multipart ãªã¯ãšã¹ãããããã¯ãã æ³š: ãã®ã«ãŒã«ã Block ã¢ãŒãã§å®è£
ãããšããã¡ã€ã«ã¢ããããŒããå¿
èŠãšããã¢ããªã±ãŒã·ã§ã³ãåäœããªããªããŸããã¢ããªã±ãŒã·ã§ã³ã§ãã¡ã€ã«ã¢ããããŒããäžèŠãªå Žåã¯ã multipart/form-data ããããã¯ããããšã§ãäž¡æ¹ã® CVE ã«ã€ããŠãããããã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠæªçšå¯èœãªãmultipart åŠçã§ã¡ã¢ãªäžè¶³ãåŒãèµ·ããæ»æçµè·¯ããšããžã§æé€ã§ããŸãã ååãæå®ããåäžã®ããããŒã¯ 8 KB ã®ããããŒäžéã®å¯Ÿè±¡å€ã§ãå
šäœãæ€æ»ãããŸãããã®ããã Content-Type ããããŒã§ã®ç
§åã¯ç¢ºå®ã«æ©èœããŸãã { "Name": "Block-Multipart-FormData", "Priority": 1, "Action": { "Count": {} }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "SingleHeader": { "Name": "content-type" } }, "PositionalConstraint": "CONTAINS", "SearchString": "multipart/form-data", "TextTransformations": [ { "Priority": 0, "Type": "LOWERCASE" } ] } }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "PHP2ShellBlockMultipart" } } ãªã¯ãšã¹ãæ¬æã®ãµã€ãºã«äžéãèšå®ãã æ¬æãµã€ãºã«äžéãèšå®ãããšãCVE-2026-109618 ã®åå ãšãªãã¡ã¢ãªäžè¶³ç¶æ
ãšãããã«ãã£ãŠæ®ãå¯èœæ§ã®ããå€ãç¶æ
ãæå¶ã§ããŸãããµã€ãºå¶çŽãšäœµã㊠OversizeHandling: MATCH ã䜿çšãããšãæ¬ææ€æ»ãµã€ãºå¶éãè¶
ããæ¬æãå«ãããããå€ãã倧ããæ¬æããã¹ãŠãããã¯ã§ããŸããN ãã€ãã®äžéãé©çšããã«ã¯ããŠã§ã ACL ã®æ¬ææ€æ»ãµã€ãºå¶éã N 以äžã«ããå¿
èŠããããŸãããªãããµã€ãºå¶çŽã§ Content-Length ã®æ°å€ã«äžéãèšå®ããããšã¯ã§ããŸããããµã€ãºå¶çŽã枬å®ããã®ã¯ããããŒå€ã®æååã®é·ãã§ãããå€ãè¡šãæ°å€ã§ã¯ãªãããã§ããã¢ããªã±ãŒã·ã§ã³ã«æ£åœãªå€§å®¹éã¢ããããŒããããå Žåã¯ãURI ãã¹ã«å¯Ÿãã AndStatement ã䜿çšããŠããã®ã«ãŒã«ã®å¯Ÿè±¡ãã¢ããããŒã以å€ã®ãã¹ã«éå®ããŠãã ãããéå®ããªãå Žåããããã®ã¢ããããŒããåäœããªããªããŸãã { "Name": "Block-Oversize-Body", "Priority": 3, "Action": { "Count": {} }, "Statement": { "SizeConstraintStatement": { "FieldToMatch": { "Body": { "OversizeHandling": "MATCH" } }, "ComparisonOperator": "GT", "Size": 8192, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "PHP2ShellBlockOversizeBody" } } 泚: AWSManagedRulesCommonRuleSet ãããŒãžãã«ãŒã«ã°ã«ãŒããæ¢ã«äœ¿çšããŠããå Žåããã®ã°ã«ãŒãã«å«ãŸãã SizeRestrictions_BODY ã«ãŒã«ããããã©ã«ãã§ 8 KB ãè¶
ããæ¬æããããã¯ããŸããç¹å®ã®ãããŒãžãã«ãŒã«ãæ£åœãªãã©ãã£ãã¯ã«åœ±é¿ããå Žåã¯ãã°ã«ãŒãå
šäœãç¡å¹ã«ããã®ã§ã¯ãªãããã®ã«ãŒã«ã®ã¿ã Count ã«ãªãŒããŒã©ã€ãããŠãã ããã ç¹°ãè¿ãã®è©Šè¡ãã¬ãŒãå¶éãã POST ãªã¯ãšã¹ãã«ã¬ãŒãããŒã¹ã®ã«ãŒã«ãé©çšãããšãæ»æè
ãéä¿¡ã§ãããªã¯ãšã¹ãéãæããã¯ãŒã«ãŒãžã®éè² è·ã«ãã£ãŠè匱æ§ãããªã¬ãŒãããå¯èœæ§ãäžããããšãã§ããŸãããŸããå€ãç¶æ
ãæªçšããçµè·¯ãæç«ããã«ã¯ããããã¥ãŒãµãŒã®ãªã¯ãšã¹ããšã³ã³ã·ã¥ãŒããŒã®ãªã¯ãšã¹ããåãã¯ãŒã«ãŒã«å°éããå¿
èŠããããŸãããã®ã«ãŒã«ã¯ããªã¯ãšã¹ãããšã«ã¯ãŒã«ãŒããªãµã€ã¯ã«ãããµãŒããŒèšå® pm.max_requests=1 ãè£å®ãããã®ã§ãã { "Name": "RateLimit-Posts", "Priority": 4, "Action": { "Count": {} }, "Statement": { "RateBasedStatement": { "Limit": 100, "EvaluationWindowSec": 60, "AggregateKeyType": "IP", "ScopeDownStatement": { "ByteMatchStatement": { "FieldToMatch": { "Method": {} }, "PositionalConstraint": "EXACTLY", "SearchString": "POST", "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } } } }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "PHP2ShellRateLimitPosts" } } AWS WAF ãè£å®ãããµãŒããŒåŽã®ç·©åç 以äžã®ãã¹ããšã©ã³ã¿ã€ã ã®å€æŽã¯ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ãæ€æ»ãã HTTP ã¬ã€ã€ãŒããäžã«ãã CVE-2026-109619 ã®èŠçŽ ã«å¯ŸåŠãããã®ã§ãããã®ããããããã®èŠçŽ ã¯ããããããã¡ã€ã¢ãŠã©ãŒã«ã®å¯Ÿè±¡ç¯å²å€ã«ãããŸããé²åŸ¡ã«ããããã¹ãããã³ã©ã³ã¿ã€ã ã®ã¬ã€ã€ãŒãšããŠãAWS WAF ã«ãŒã«ãšäœµããŠé©çšããŠãã ããã PHP ã 8.5.12ã8.4.27ã8.3.36ããŸã㯠8.2.35 ã«ã¢ããã°ã¬ãŒãããŸãã ãããå¯äžã®å®å
šãªä¿®æ£ã§ããPHP 8.1 以åã¯ã¢ããã¹ããªãŒã ã§ã®ãµããŒããçµäºããŠããŸãããã£ã¹ããªãã¥ãŒã·ã§ã³ãŸãã¯é·æãµããŒããã³ããŒã«ããã¯ããŒããããä¿®æ£ããããã確èªãããããµããŒã察象ã®ãã©ã³ããžã®ç§»è¡ãèšç»ããŠãã ããã PHP ã¬ãã«ã§ CVE-2026-109618 ã«å¯ŸåŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãäžæžãã§ããªãããã« memory_limit=-1 ãèšå®ããpost_max_size ã¯å°ããå€ã«æããŸã (ã¢ããªã±ãŒã·ã§ã³ãã¢ããããŒããåãä»ããªãå Žå㯠8Mãåãä»ããå Žå㯠32M)ãã¡ã¢ãªã®äžéã¯ã³ã³ãããŸã㯠cgroup ã®å¶éã§é©çšããŠãã ãããRLIMIT_AS ã RLIMIT_DATA ã¯è匱ãªã¡ã¢ãªäžè¶³çµè·¯ãããªã¬ãŒãããããæ±ºããŠäœ¿çšããªãã§ãã ããã PHP 8.5 ã§ fatal_error_backtraces=0 ãèšå®ãããã¹ãŠã®ã¯ãŒã«ãŒãåèµ·åããŸãã ããã«ããããªã¯ãšã¹ãããŸããã§ã¯ã©ãã·ã¥ãã¬ãŒã¹ã®ç¶æ
ãä¿æããèšå®ãç¡å¹ã«ãªããŸãããã®èšå®ã¯ãè匱æ§ãããªã¬ãŒããæ¹æ³ãšããŠç¢ºèªãããŠãããã®ã® 1 ã€ã§ãã ãµãŒããŒåŽã§ session.upload_progress.enabled=0 ãèšå®ãããã¹ãŠã®ã¯ãŒã«ãŒãåèµ·åããŸãã ããã«ããããã 1 ã€ã®ç¢ºèªæžã¿ã®ããªã¬ãŒã§ããã¢ããããŒã远跡æ©èœãç¡å¹ã«ãªããŸãããã®æ©èœã¯ããããé©çšåŸãç¡å¹ã®ãŸãŸã«ããŠããããšããå§ãããŸãã èšå®ã«ã¯ php.ini ãFPM ããŒã«ããŸãã¯ãµãŒããŒèµ·åæã®æ§æã ããªã¯ãšã¹ãããšã® INI ãªãŒããŒã©ã€ã (ãªã¯ãšã¹ãåäœã§èšå®ãé©çšãã .htaccess ã php_value ããŸã㯠FastCGI ã® PHP_VALUE) ãããåªå
ããŠäœ¿çšããŠãã ããããŸãã蚺æèŠåãçºçããªãããã廿¢ããããã£ã¬ã¯ãã£ãã¯åé€ããŠãã ããã èŽåœçãªãšã©ãŒãšå®è¡ã¿ã€ã ã¢ãŠããè§£æ¶ããŸãã 察象ã¯ãã¢ããããŒããã€ã³ããŒãããšã©ãŒããŒãžãã·ã£ããããŠã³ãã·ãªã¢ã«åãæ¡åŒµæ©èœã®ãã¹ãªã©ãæ»æè
ãå°éå¯èœãªã«ãŒãã§ãã ããã©ãŒãã³ã¹äžåé¡ããªããã°ã pm.max_requests=1 ãèšå®ããŸãã ããã«ãããåã¯ãŒã«ãŒããã»ã¹ã¯ 1 ã€ã®ãªã¯ãšã¹ããåŠçãããã³ã«ãªãµã€ã¯ã«ãããå€ãããŒã¿ãæ®ããªã¯ãšã¹ããšããã®ããŒã¿ãåå©çšããåŸç¶ã®ãªã¯ãšã¹ããšã®ã€ãªãããæãããŸãã ãšã©ãŒãã°èšé²ãæå¹ã«ããŸã ( log_errors=On ãæå¹ãªåºåå
ãæå®ãã error_log ã error_reporting=E_ALL )ããã®ããã§ãApacheãFPMããŸãã¯ãããã·ã®ãã°ã確èªããæ»æè
ãå¶åŸ¡å¯èœãªã«ãŒãã§èŠåãéæšå¥šã®éç¥ãèŽåœçãªãšã©ãŒãã¿ã€ã ã¢ãŠããç¹°ãè¿ãçºçããŠããªããã調ã¹ãŠãã ããããšã©ãŒãåºãŠããªããããšãã£ãŠãå®å
šã§ãããšã¯éããŸããã éå§æ¹æ³ æ¬¡ã®æé ã§å¯Ÿå¿ãéå§ããŠãã ããã PHP ã皌åããŠããå Žæãšã䜿çšäžã®ããŒãžã§ã³ããã³ãµãŒã㌠API (mod_phpãFPMãFrankenPHPãLSAPI) ãæ£åžãããŸãããŸãããªã¯ãšã¹ãæ¬æãåãä»ãããããªãã¯ãšã³ããã€ã³ããç¹å®ããŸãã åã¢ããªã±ãŒã·ã§ã³ã multipart ã¢ããããŒãã䜿çšããŠãããã©ããã確èªããŸããããã«ãããmultipart ãªã¯ãšã¹ãããããã¯ãã AWS WAF ã«ãŒã«ããããã€ã§ãããã©ãããæ±ºãŸããŸãã å PHP ã¯ãŒã¯ããŒãã®å段ã«ãããŠã§ã ACL ãäœæãŸãã¯æŽæ°ãã該åœããã«ãŒã«ã Count ã¢ãŒãã§è¿œå ããŸããã«ãŒã«ã§å¿
èŠãªå Žåã¯ãCloudFront ãŸã㯠API Gateway ã®æ¬ææ€æ»ãµã€ãºå¶éãåŒãäžããŸãã åã«ãŒã«ã®ãµã³ããªã³ã°ããããªã¯ãšã¹ããš Amazon CloudWatch ã¡ããªã¯ã¹ãç£èŠããæ£åœãªã¢ããããŒãã倧容éã® JSON æ¬æãå«ã POST ãªã¯ãšã¹ããã«ãŒã«ã«äžèŽããŠããªãããšã確èªããŸãã ã¡ããªã¯ã¹ã«åé¡ããªããã°ãã«ãŒã«ã Block ã«åãæ¿ããŸããã»ãã·ã§ã³ã¢ããããŒã鲿ãã£ãŒã«ãã®ã«ãŒã«ãš multipart ã«ãŒã«ããæ¬æãµã€ãºã«ãŒã«ãšã¬ãŒãããŒã¹ã®ã«ãŒã«ããå
ã«è©äŸ¡ããããããåªå
床ãèšå®ããŸãã ç¡å®³ãª multipart/form-data ã® POSTãèšå®ãããµã€ãºäžéãè¶
ããæ¬æã PHP_SESSION_UPLOAD_PROGRESS ãå«ããªã¯ãšã¹ãã§ãã¹ãããŸãã403 ã¬ã¹ãã³ã¹ãè¿ãããäžèŽããã«ãŒã«ã®ã¡ããªã¯ã¹ãèšé²ãããããšã確èªããŸãã 䞊è¡ããŠãPHP ã®ã¢ããã°ã¬ãŒããšæ§æã®ç·©åçãé©çšããŸããããªãŒããžã®ãããé©çšãå®äºããããAWS WAF ã«ãŒã«ãåé€ããããè£å©çãªå¶åŸ¡ãšããŠç¶æããŸãã ãŸãšã PHP2Shell èåŒ±æ§ (CVE-2026-109618 ããã³ CVE-2026-109619) ã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®è¡ãããåã®æ®µéã§ PHP ã«å°éãããèªèšŒäžèŠã® RCE è匱æ§ã§ããAWS WAF ã¯ããããé©çšæéäžã®ã¢ã¿ãã¯ãµãŒãã§ã¹ã®çž®å°ã«åœ¹ç«ã¡ãŸããå
·äœçã«ã¯ãã»ãã·ã§ã³ã¢ããããŒã鲿ãã£ãŒã«ãã®ãããã¯ãã¢ããããŒããæ³å®ãããªãå Žåã® multipart ãªã¯ãšã¹ãã®ãããã¯ããªã¯ãšã¹ãæ¬æãµã€ãºã®äžéèšå®ãç¹°ãè¿ãã®è©Šè¡ã®ã¬ãŒãå¶éã§ãããããã®ç·©åçã¯é²åºã®äœæžã«åœ¹ç«ã¡ãŸãããè匱æ§ãã®ãã®ãè§£æ¶ãããã®ã§ã¯ãããŸãããPHP ãä¿®æ£æžã¿ã®ãªãªãŒã¹ã«ã¢ããã°ã¬ãŒããããµãŒããŒæ§æã®å€æŽãé©çšããŠãã ãããAWS WAF ã«ãŒã«ã¯ä¿®æ£ãã®ãã®ã§ã¯ãªãããããã®ä¿®æ£ãæ¯ãããšããžã®ã¬ã€ã€ãŒãšããŠäœçœ®ä»ããŠãã ããã ããã§äœ¿çšããã«ãŒã«ã¿ã€ãã®è©³çްã«ã€ããŠã¯ãAWS WAF ããã¥ã¡ã³ãã® ãŠã§ã ACL ã®æ¬ææ€æ»ãµã€ãºå¶é ã ãµã€ãºè¶
éã®ãªã¯ãšã¹ãã³ã³ããŒãã³ãã®åŠç ãããã³ ãµã€ãºè¶
éã® HTTP ãªã¯ãšã¹ãæ¬æã®åŠç ã«é¢ããããŒãžãåç
§ããŠãã ãããè匱æ§ã®è©³çްã«ã€ããŠã¯ãPHP ã¢ããã€ã¶ãª GHSA-w8hw-w9fx-j79w ããã³ GHSA-6wmf-4rv5-p3rp ãPHP ã® ã»ãã·ã§ã³ã¢ããããŒã鲿ã®ããã¥ã¢ã« ãåç
§ããŠãã ããã Alex Waddell Alex Waddell ã¯ãAWS ã® Worldwide Specialist Organization ã§ã»ãã¥ãªãã£ãå°éãšãã Principal Solutions Architect ã§ãã¹ã³ããã©ã³ããæ ç¹ãšããŠããŸãã1999 幎ããã»ãã¥ãªãã£åéã«æºããã2021 幎㫠AWS ã«å
¥ç€ŸããŸãããEMEA å
šåã®ã客æ§ãšãšãã«ãã¯ã©ãŠãã»ãã¥ãªãã£ã¢ãŒããã¯ãã£ãã¢ã€ãã³ãã£ãã£ãè
åšæ€åºãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã«åãçµãã§ããŸããä»äºä»¥å€ã§ã¯ãäžçåå°ã®ã©ã é
ã®é£²ã¿æ¯ã¹ (Alex ã¯ãŠã€ã¹ããŒã奜ãŸãªãçããã¹ã³ããã©ã³ã人㮠1 人ã§ã)ãå°å
ã®æ£®ã®å°éã§ã®ç¬ã®æ£æ©ãæ
è¡ã楜ããã§ããŸãã Lawton Pittenger Lawton ã¯ããã¥ãŒãšãŒã¯åžãæ ç¹ãšãã AWS ã® Worldwide Security Specialist Solutions Architect ã§ãã广çãªãããã¯ãŒã¯ã»ãã¥ãªãã£å¶åŸ¡ã®èšèšãšå®è£
ã«ã€ããŠãã客æ§ãæ¯æŽããããšãå°éãšããŠããŸããAWS ã§ã¯ãå¹
åºãã客æ§ãšååãããšãšãã«ããµãŒãã¹ããŒã ãšç·å¯ã«é£æºããã客æ§ã®ããŒãºãšãã£ãŒãããã¯ã«åºã¥ããŠã»ãã¥ãªãã£ãµãŒãã¹ã®ç¶ç¶çãªæ¹åãæšé²ããŠããŸããä»äºä»¥å€ã§ã¯ãã¹ã±ãŒãããŒããã¹ããŒããŒããèªç¶ã®äžã§éããããšã楜ããã§ããŸãã Ian Olson Ian 㯠AWS ã® Senior Security Specialist Solutions Architect ã§ããã客æ§ãã»ãã¥ãªãã£ãµãŒãã¹ãèªååããDDoS ããŠã§ãã®è匱æ§ãæªçšããæ»æãªã©ã®è
åšããç°å¢ãä¿è·ã§ããããæ¯æŽããŠããŸããã€ã³ããªãžã§ã³ããªãŒãã¡ãŒã·ã§ã³ãéããŠãããããèŠæš¡ã®çµç¹ã«åãããã»ãã¥ãªãã£ãœãªã¥ãŒã·ã§ã³ãæäŸããŠããŸããä»äºä»¥å€ã§ã¯ã2 人ã®å¹Œãåã©ããšéããæéã倧åã«ããŠããŸãã æ¬ããã°ã¯ Security Solutions Architect ã® äžå³¶ ç« å ã翻蚳ããŸããã