CVE-2026-31431 ã¯æè¿å ¬éãããLinuxã«ãŒãã«ã®è匱æ§ã§ãããã®CVEã¯Dockerã®ã€ã³ãã©ã䟵害ããŸããã
ãšã¯ãããDocker Engineã®v29以åã®ããã©ã«ããããã¡ã€ã«ã¯4ã3ã³ã³ããã¯AF_ALGãœã±ãããäœæã§ããããã¯ãšã¯ã¹ããã€ãã䜿çšããsyscallã®è¡šé¢ã§ããDocker Engine v29ã䜿ã£ãŠããã°ãé²åºã¯ãããŸããã4ã3 以éããããã¯ããããåœãŠããã¹ãã«ãŒãã«ãããããããæ¬ ããŠããã°ããã®ãã¹ãã§é²åºããŠããã®ã§ããã®æçš¿ã®ç¶ããèªãã¹ãã§ãã
å·çæç¹ã§ãã«ãŒãã«ãããã¯Debian(CVE-2026-31431)ããã³RHEL 9 (RHSB-2026-002)ã§å©çšå¯èœã§ããã Ubuntuäžã¯ãŸã å©çšã§ããŸãããã«ãŒãã«ä¿®æ£ããŸã æäŸããŠããªããã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã«ãšã£ãŠã¯ãDocker Engineã®ã¢ããã°ã¬ãŒãã仿¥é©çšã§ããç·©åçã§ãã
ã³ããŒã»ãã§ã€ã«ã«ã€ããŠèªãã¹ãçç±
ãã® CVE ã¯ãå€ãã® Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ãã«ãŒãã«ããããå ¥æããåã«å ¬ã«ãªã£ãããã倧ããªæ³šç®ãéããŸããããã®çµæãã»ãšãã©ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯äŸç¶ãšããŠè匱ã§ãããé瀺æç¹ã§å³å¹ãã解決çãæã£ãŠããŸããã§ãããç¹ã«æ³šç®ãã¹ãã¯ããã®ãã°ãçŽ 2017幎é ãŸã§é¡ãLinuxã«ãŒãã«ã«åœ±é¿ãäžãã圱é¿ãç°åžžã«åºç¯å²ã«åãã§ããããã§ãã
Docker EngineããŒã ã§ã¯ãè匱ãªãã¹ãã®ãŠãŒã¶ãŒãå®ãããã«èªåãã¡åŽã§äœãã§ãããã調æ»ãå§ããŸããããããããã®ç·©åçã¯æåã«æã£ããããè€éã§ãæåã®è©Šã¿ã§ 32ãããã®ãã€ããªãç ŽãããŸããããã®æçš¿ã¯ãç§ãã¡ãçºå£²ãããã®ãå£ãããã®ãåŠãã ããšããããŠçŸåšã®ç¶æ³ã«ã€ããŠè¿°ã¹ãŠããŸãã
ã³ããŒå€±æãšã¯äœã
4æ 29æ¥ãç ç©¶è ãã¡ã¯Linuxã«ãŒãã«ã®AF_ALGæå·ãµãã·ã¹ãã ã«ãããæš©éææ Œã®è匱æ§ãšããŠãã³ããŒãã§ã€ã«ããšåŒã°ããCVE-2026-31431ãæããã«ããŸããã
æ¬ é¥ã¯ algif_aead ã¢ãžã¥ãŒã«ã«ãããŸããAF_ALGãœã±ããã«ã¢ã¯ã»ã¹ã§ããéç¹æš©ãŠãŒã¶ãŒãããŒãžãã£ãã·ã¥ãžã®å¶åŸ¡ãããæžã蟌ã¿ãè¡ãããšãå¯èœã«ããŸããããŒãžãã£ãã·ã¥ã¯ã·ã¹ãã å
šäœã®ãã¡ã€ã«èªã¿åããããã¯ããã¯ãããããæ»æè
ã¯ãã¹ãäžã®ãã¹ãŠã®ããã»ã¹ãèªèããä»»æã®èªã¿åãå¯èœãªãã¡ã€ã«ã®å
容ãäžæçã«å€æŽã§ããŸããsetuidãã€ããªãç ŽæãããããšãããŒã«ã«ã«ãŒããžã®æãçŽæ¥çãªçµè·¯ã§ãããããªããã£ãèªäœã¯ããäžè¬çã§ãã
ãã®è匱æ§ã¯ç°¡åã§ã 2017以éãªãªãŒã¹ããããã¹ãŠã®ãããæªä¿®æ£ã®Linuxã«ãŒãã«ã§æå¹ã§ãã
æ£ããä¿®æ£ã¯ã«ãŒãã«ã¢ããããŒãã§ãã以äžã«èª¬æããç·©åçã¯ããããæªåŠçã®ã«ãŒãã«äžã§åäœããã³ã³ããã®é²åºãæžãããã®ã§ãããæ ¹æ¬çãªè匱æ§ãä¿®æ£ãããã®ã§ã¯ãããŸãããã«ãŒãã«ãã³ããŒããããããªãªãŒã¹ããŠãããªããé©çšããŠãã ããã
ããã¯ã³ã³ããã«ãšã£ãŠäœãæå³ããã®ã§ãããã?
ããã©ã«ãã®ã»ãã¥ãªãã£ãããã¡ã€ã«ã§åäœããã³ã³ããå ã§ãã³ãŒãå®è¡ãè¡ãæ»æè ã¯ã³ããŒå€±æã䜿ã£ãŠããŒãžãã£ãã·ã¥å ã®ããŒãžãç Žæãããããšãã§ããŸããäžã€ã®å¯èœãªçµæã¯ãsetuidãã€ããªãç ŽæããŠã³ã³ããå ã§rootåãããŸã§ãšã¹ã«ã¬ãŒã·ã§ã³ããããšã§ãã
ããããããŒãžãã£ãã·ã¥ã¯ãã¹ãå šäœã§å ±æãããããã圱é¿ã¯æ»æè ã®ã³ã³ããã«éå®ãããŸãããä¿®æ£ãããããŒãžã¯ãã¹ãã ãã§ãªããåããã¡ã€ã«ããããã³ã°ããä»ã®ãã¹ãŠã®ã³ã³ãã(å ±æç»åã¬ã€ã€ãŒãå«ã)ã«èŠããŸããåãããŒãäžã®ä»ã®ã¯ãŒã¯ããŒãã圱é¿ãåããããšããããŸãã
ãã®æ»æã¯ãããã©ã«ãã®ã³ã³ãããæäŸãã以äžã®ç¹å¥ãªèœåãæš©éãå¿
èŠãšããŸãããå¯äžã®èŠä»¶ã¯ AF_ALG ãœã±ããã®äœæèœåã§ãããããã¯ä»¥åDockerã®ããã©ã«ãã®ã»ãã¥ãªãã£ãããã¡ã€ã«ã§èš±å¯ãããŠããŸããã
ååææŠ:seccomp(294.2)
Docker Engineã®ããã©ã«ãã® seccompãããã¡ã€ã« ãæŽæ°ãã AF_ALG ãœã±ããããããã¯ããŸãããseccompãã£ã«ã¿ãŒã¯æåã®åŒæ°ãæ€æ»ã㊠socket(2) ãããã§ã«ãããã¯ãããŠããã¢ãã¬ã¹ãã¡ããªãŒ AF_ALG ãš AF_VSOCK ãæåŠããŸãã
socket(2)ããããã¯ããã ãã§ã¯ååã§ã¯ãããŸãããLinux64 x86_ã§ãœã±ãããäœæããããäžã€ã®æ¹æ³ããããŸããããã¯socketcall(2)ãšããå€ãå€éåã·ã¹ãã ã³ãŒã«ã§ãsocketãbindãconnectãªã©ã®ãœã±ããæäœãåäžã®Syscallçªå·ã«ã©ããããŠããŸãã
Linuxäžã§ãœã±ãããäœæããããäžã€ã®æ¹æ³ããããŸãã socketcall(2)ãšããå€ãå€éåã·ã¹ãã ã³ãŒã«ã§ã socketã bindã connectãªã©ã®ãœã±ããæäœãåäžã®ã·ã¹ã³ãŒã«çªå·ã§ã©ããããŸãã
seccompã®åé¡ã¯ã socketcall ãå®éã®åŒæ°(ã¢ãã¬ã¹ãã¡ããªãŒãå«ã)ããŠãŒã¶ãŒã¹ããŒã¹é
åã«ããã¯ããBPFããã®ãã€ã³ã¿ããªãªã¬ãªã³ããŠæ€æ»ã§ããªãããšã§ããseccompã§ã¯socketcallãéããAF_ALGãéžæçã«ãããã¯ããæ¹æ³ã¯ãããŸããã
Linux 4ã3 ãã§ã«i386 ãšS390ã«çŽæ¥ãœã±ããã®ã·ã¹ãã ã³ãŒã«ã远å ããŠããã®ã§ãã»ãšãã©ã®çŸä»£ã®ãã€ããªã¯ãã§ã«æ°ãã socket ã·ã¹ã³ãŒã«ã䜿ã£ãŠããã socketcall ã¯å€ããã€ããªã«ã®ã¿åœ±é¿ãããšæ³å®ããŠããŸãããããã§å®å
šã«ãããã¯ããDocker Engine v29ãåºè·ããŸããã4ã2(ãªãªãŒã¹ããŒã)
äœãå£ããã®ã
socketcallã®åŠå®ã¯ããŸãã«ãåºç¯ã§ããããšã倿ããŸããã
å€ãããŒãžã§ã³ã®glibcã¯socketcall386ãã¹ãŠã®ãœã±ããæäœãã«ãŒãã£ã³ã°ããGoã©ã³ã¿ã€ã ã§ã¯GOARCH=386ã«ç¡æ¡ä»¶äœ¿çš(glibcãšã¯ç¬ç«)ãå€ãã®ã¬ã¬ã·ãŒãã²ãŒã ã¯ãŒã¯ããŒã(SteamCMDãWine)ã¯ããã«äŸåããŠããŸãã
socketcallãããã¯ã¯ã³ã³ããå
ã§åäœããå€ãã®32ããããã€ããª(moby/moby#52506)ã®ãããã¯ãŒã¯ãå£ããŸããã
ããã¯åãªãç§386 ã®åé¡ã§ã¯ãããŸãããAMD64ã§ã¯ãä»»æã®ããã»ã¹ãint $0x80ãšã®IA32äºæã¢ãŒãã«åãæ¿ããçŽæ¥socketcallãåŒã³åºããããšãã§ããsocket(2)ARGãã£ã«ã¿ãŒãå®å
šã«åé¿ã§ããŸãããã®çµè·¯ã«å°éããã®ã« 32ãããã³ã³ããã 32ãããã®ãã€ããªã¯å¿
èŠãããŸããã
圱é¿ãåããã³ã³ããã¯ãã«ã¹ã¿ã ã®seccompãããã¡ã€ã«ã䜿ã£ãŠsocketcallãåæå¹åãã€ã€ãçŽæ¥socket(2)ãã¹ã§ãããã¯AF_ALGä¿æããããšã§ãããåé¿ã§ããŸãã
ããããããã¯ã³ã³ããã®ç¡¬åã«ç©Žãéããã ãã§ãããªããªãããã®äžã®æ»æè
ãsocketcallãéããŠAF_ALGã«å±ãå¯èœæ§ãããããã§ãã
2åç®ã®è©Šã¿:LSMããŒã¹ã®å·è¡(v29.4.3)
æ ¹æ¬çãªåé¡ã¯ãseccompãã·ã¹ã³ãŒã«å¢çã§åäœãã socketcall ãã€ã³ã¿åŒæ°ä»ãã§åäžã®ã·ã¹ã³ãŒã«çªå·ã®èåŸã§å€ãã®æäœãå€éåããŠããããšã§ããSeccompã ãã§ãœã±ããã³ãŒã«ãéãã AF_ALG ãéžæçã«ãããã¯ããããšã¯ã§ããŸããã
AppArmorãšSELinuxã¯ç°ãªãã¬ãã«ã§æ©èœããŠããŸããLinuxã»ãã¥ãªãã£ã¢ãžã¥ãŒã«ã¯ã«ãŒãã«ã® security_socket_create() ã³ãŒã«ããã¯ã«çŽæ¥ããã¯ããã©ã®syscallãšã³ããªãŒãã€ã³ãã䜿ãããŠããŠããã«ãŒãã«ãå®éã«ãœã±ãããªããžã§ã¯ããäœæãããšã³ãŒã«ããã¯ãçºåããŸããLSM㯠AF_ALG ãç¹å®ã®æ¡ä»¶ã§æåŠãã€ã€ãä»ã®ãœã±ããã³ãŒã«ã®äœ¿çšã¯ãã®ãŸãŸã«ããããšãã§ããŸãã
v29ã«ãããŠã4ã3(ãªãªãŒã¹ããŒã)ãç§ãã¡ã¯:
socketcallseccomp denyãå ã«æ»ãã32ãããäºææ§ãå埩ããŸãããããã©ã«ãã®AppArmorãããã¡ã€ã«( moby/profiles#)ã«22 deny network alg, ã远å ããŸããã
AppArmorãæå¹ã«ãªã£ãŠããã·ã¹ãã (äŸ:UbuntuãDebian)ãããã«ããsocket(2)ãšsocketcall(2)ã®äž¡æ¹ã§AF_ALGããããã¯ããŸãã- SELinuxãåäœãããã·ã¹ãã (FedoraãRHELãCentOS)åãã«SELinux CILããªã·ãŒã¢ãžã¥ãŒã«ãçµ±åããŸããã
ãã®ã¢ãžã¥ãŒã«ã¯ãã¹ãŠã®container_domainã¿ã€ãã«å¯ŸããŠalg_socketäœæãæåŠããsemoduleã§èªã¿èŸŒãããšãã§ããŸãã
SELinuxã®åŒ·å¶ã«ã¯ãããŒã¢ã³ã--selinux-enabledãšå ±ã«åäœããŠããããšãå¿ èŠã§ãã - seccomp
socket(AF_ALG)argãã£ã«ã¿ãŒã¯ ãçŽæ¥socket(2)ã·ã¹ã³ãŒã«ãã¹ã®é²åŸ¡æ·±å±€ãšããŠä¿æããŸããã
ããªãããã¹ãããšã¯
- ã«ãŒãã«ã«ããããåœãŠãŠãã ããã
ãããæ¬åœã®è§£æ±ºçã§ãã
ããªãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ãCVE-2026-31431ã«å¯Ÿå¿ããã«ãŒãã«ã¢ããããŒããããã確èªããŠãã ããã - Docker Engineãv29ã«ã¢ããã°ã¬ãŒãããŠãã ããã4ã3 ããã以éãæŽæ°ãããseccomp + AppArmor + SELinuxã®ããã©ã«ããåºãŸããsystemctlã®åèµ·ådocker(ãŸãã¯åçã®ãã®)ã§ååã§ãããã¹ãã®åèµ·åã¯äžèŠã§ãã
- ã«ãŒãã«ããšã³ãžã³ãããã«ã¢ããã°ã¬ãŒãã§ããªãå Žå:
- ã«ãŒãã«ã¢ãžã¥ãŒã«ããã©ãã¯ãªã¹ãã«å
¥ãã
blacklist af_algãšblacklist algif_aeadã远å/etc/modprobe.d/ã
ããã¯ã¢ãžã¥ãŒã«ãã«ãŒãã«ã«ã³ã³ãã€ã«ãããŠããªãå Žåã«éããããŒãå¯èœãªã¢ãžã¥ãŒã«(CONFIG_CRYPTO_USER_API=m)ãšããŠæ§ç¯ãããŠããå Žåã®ã¿æ©èœããŸãã - ã«ã¹ã¿ã ã®seccompãããã¡ã€ã«ãé©çšããŠã
--security-opt seccomp=/path/to/profile.jsonãdaemon.jsonã®seccomp-profileãªãã·ã§ã³ã®äœ¿çšãAF_ALGæåŠããŸãã
ç· ãã®æãã€ã
ã»ãã¥ãªãã£ã¯å±€ç¶ã«éãªããæã«ã¯äžå±€ã ãã§ã¯ååã§ã¯ãããŸãããSeccompã¯ãã¹ãŠã®ã·ã¹ãã ã§ socket(AF_ALG) ããããã¯ããŸããã socketcallã«ã¯æ°ã¥ããŸãããAppArmorãšSELinuxã¯äž¡æ¹ã®çµè·¯ããããã¯ããŸããããã¹ãã®èšå®ã«äŸåããŸããäºäººã¯å
±ã«ãã©ã¡ãäžäººã§ãã«ããŒã§ããªãããšãã«ããŒããŠããã
LSMãæããªãã·ã¹ãã ã§ã¯ãDockeråŽããã® socketcall çµè·¯ã¯ãããã¯ãããŠããŸãããæçµçã«ä¿®æ£ãã¹ãã¯ã«ãŒãã«ã®ãã°ã§ãã
ã«ãŒãã«ã®è匱æ§ã¯ä»åŸãçºçãç¶ããã§ãããããããªããšãã³ã³ããã©ã³ã¿ã€ã ãç·©åçãå±éããã®ã«æãéãå Žæãšãªãããšãå€ãã§ãããªããªããšã³ãžã³ã®æŽæ°ã¯ãã¹ãäžã®ãã¹ãŠã®ã³ã³ãããä¿è·ããäžã€ã®å€æŽã ããã§ããã³ããŒå€±æã®ã¿ã€ã ã©ã€ã³ã¯ãããç¹ã«æç¢ºã«ç€ºããŠããŸããããšã³ããŒãŽã¯ãã£ã¹ããªãã¥ãŒã·ã§ã³ãä¿®æ£ãæŽããåã«è§£é€ãããæ°æ¥éã¯ã«ãŒãã«ã®åæ§ç¯ãåŸ ããã«ãšã³ãžã³ã ããåé¡ã軜æžã§ããå Žæã§ããã
Docker Engineãææ°ã®ç¶æ ã«ä¿ã€ããšã¯ãåãªãæ°æ©èœã®è©±ã§ã¯ãããŸãããããã¯ãã«ãŒãã«CVEãå ¬éããããŸã§ã®æéãçž®å°ããæã广çãªæ¹æ³ã®äžã€ã§ãã