
ð CVE-2026-31431ïŒCopyFailïŒã®å®å šãªã±ãŒã¹ã¹ã¿ã㣠â Linuxã«ãŒãã«ã«ãããéå€§ãªæš©éææ Œã®è匱æ§ãæè¡åæãæ€èšŒã¹ã¯ãªãããããŒããã³ã°ãã€ã³ã·ãã³ãã¬ã¹ãã³ã¹ã®ãã¬ã€ããã¯ãå«ããæè²ç®çã
ã³ãã¥ããã£ã§æã䜿ãããŠããããŒã«ãèŠã€ããŸãããã
ãã¹ãŠã®ããŒã«ãæ¢çŽ¢
ããŒã«ã³ã¬ã¯ã·ã§ã³ãé²èЧ
ãã¹ãŠã®ããŒã«ãèŠã âå®å šãªã±ãŒã¹ã¹ã¿ã㣠â çºèŠã®çµç·¯ãä»çµã¿ããã¹ãæ¹æ³ãåçŸæ¹æ³ïŒå®å šãªç°å¢ã§ã®ïŒããããŠ2017幎以éã®ã»ãŒãã¹ãŠã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã«åœ±é¿ããé倧ãªè匱æ§ã®ä¿®æ£æ¹æ³ã
ãã®ãªããžããªã¯æè²ç®çå°çšã§ããããã«å«ãŸããæ å ±ã¯ãã»ãã¥ãªãã£å°éå®¶ãç ç©¶è ããµã€ããŒã»ãã¥ãªãã£åŠçã察象ãšããŠããŸããæç€ºçãªèš±å¯ãªããããã§èª¬æãããŠãããããªãæè¡ãã·ã¹ãã ã§äœ¿çšããªãã§ãã ããã ãããã®æ å ±ã®äžæ£äœ¿çšã¯ããã©ãžã«ã®æ³åŸç¬¬12.737/2012å·ïŒCarolina Dieckmannæ³ïŒããã³ã€ã³ã¿ãŒãããæ°äºæ çµã¿æ³ïŒç¬¬12.965/2014å·ïŒã«åºã¥ãç¯çœªãšãªãå¯èœæ§ããããŸãã
CopyFailè匱æ§ã¯ãã»ãã¥ãªãã£äŒæ¥**Theori**ãLinuxã«ãŒãã«ã®ã³ãŒãè§£æäžã«ãç¹ã«ã¡ã¢ãªç©ºééã§ããŒã¿ãã³ããŒãã圹å²ãæ ããµãã·ã¹ãã ã§çºèŠããŸããã
2026幎3æ â Theoriã®ç ç©¶è
ãã«ãŒãã«ã®ç°åžžãªåäœãç¹å®
2026幎3æ â ã«ãŒãã«ã»ãã¥ãªãã£ããŒã ãžã®è²¬ä»»ããé瀺ïŒResponsible DisclosureïŒ
çŽ1é±éåŸ â kernel.orgã§ã¢ããã¹ããªãŒã ããããå
Ž
2026幎5æ â ãšã¯ã¹ããã€ãã³ãŒãïŒPoCïŒãå
Ž
2026幎5æ1æ¥ â Microsoftãæè¡åæãå
Ž
2026幎5æ4æ¥ â CISAãKEVã«ã¿ãã°ïŒæ¢ç¥ã®æªçšãããè匱æ§ïŒã«è¿œå
2026幎5æ15æ¥ â ç±³åœé£éŠæ¿åºæ©é¢ã®ä¿®æ£æé
Linuxã«ãŒãã«ã«ã¯ãã¡ã¢ãªã®ç°ãªãé åïŒãŠãŒã¶ãŒã¹ããŒã¹ â ã«ãŒãã«ã¹ããŒã¹ïŒéã§ããŒã¿ãã³ããŒããå éšã«ãŒãã³ããããŸãããã®æ¬ é¥ã¯ã圱é¿ãåããã³ã³ããŒãã³ããæ¬æ¥ã³ããŒãã¹ãç¹å®ã®ããŒã¿ã®ã³ããŒã«å€±æãããããCopyFailãšããååãä»ããããŸãããããã«ããã«ãŒãã«å ã®æ©å¯ããŒã¿æ§é ãç Žæããæš©éææ Œã®ããã®æªçšã®çªãéãããŸãã
Linuxã«ãŒãã«ã¯ã¡ã¢ãªã2ã€ã®ç°ãªã空éã§ç®¡çããŠããŸãïŒ
âââââââââââââââââââââââââââââââââââââââ
â ãŠãŒã¶ãŒã¹ããŒã¹ â
â æ»æè
ã®ããã»ã¹ïŒuid=1000ïŒ â
â â æªæã®ããsyscallãåŒã³åºã â
ââââââââââââââââââ¬âââââââââââââââââââââ
â syscall
âŒ
âââââââââââââââââââââââââââââââââââââââ
â ã«ãŒãã«ã¹ããŒã¹ â
â ããŒã¿ã³ããŒã«ãŒãã³ â
â â ãã°: ã¡ã¿ããŒã¿ã®ã³ããŒã«å€±æ â
â â å¶åŸ¡æ§é ãç Žæ â
â â æ»æè
ããã€ã³ã¿ãæäœ â
â â rootãšããŠã³ãŒããå®è¡ â
âââââââââââââââââââââââââââââââââââââââ
uid=0ïŒrootïŒã§å®è¡ãããã·ã¹ãã ã®å®å
šãªå¶åŸ¡ãç²åŸããŸã// è匱ãªããŒãžã§ã³ïŒç°¡ç¥åãæè²çšïŒ
int kernel_copy_data(struct user_request *req) {
struct kernel_buffer kbuf;
// ãã°: ããŒã¿ã®äžéšã®ã¿ãã³ããŒããéèŠãªãã£ãŒã«ããç¡èŠ
// ã»ãã¥ãªãã£ãã£ãŒã«ãïŒsecurity_contextïŒã¯ã³ããŒãããªãïŒ
memcpy(&kbuf.data, req->data, req->size);
// â kbuf.security_context ã¯åæåãããªããŸãŸïŒã¡ã¢ãªã®ãŽãïŒ
process_buffer(&kbuf); // ç ŽæããããŒã¿ã䜿çš
return 0;
}
// ä¿®æ£ãããããŒãžã§ã³
int kernel_copy_data(struct user_request *req) {
struct kernel_buffer kbuf;
// ä¿®æ£: ã»ãã¥ãªãã£ãã£ãŒã«ããå«ãæ§é äœå
šäœãã³ããŒ
if (copy_from_user(&kbuf, req, sizeof(struct kernel_buffer)))
return -EFAULT;
process_buffer(&kbuf);
return 0;
}
â ïž 2017幎以éã«åºè·ãããã«ãŒã㫠†7.0 ãå®è¡ããŠããLinuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯ãã¹ãŠãæœåšçã«è匱ã§ãã
å
±æãµãŒããŒïŒäŸïŒãã¹ãã£ã³ã°ç°å¢ãVPSïŒäžã®æš©éã®ãªããŠãŒã¶ãŒããšã¯ã¹ããã€ããå®è¡ããrootãååŸããŸãã
ã€ã³ã¿ãŒããã â [Webè匱æ§ã«ããRCE] â å¶éä»ãã·ã§ã« â [CopyFail] â root
Microsoftã®åæã«ãããšïŒãã®æ¬ é¥ã¯ã€ã³ã¿ãŒãããçµç±ã§é ä¿¡ããããšã¯ã¹ããã€ãïŒäŸïŒWebã¢ããªã±ãŒã·ã§ã³ã®RCEïŒãšé£éãããããšãã§ãããµãŒããŒã®å®å šãªäŸµå®³ã«ã€ãªãããŸãã
LinuxãŠãŒã¶ãŒããããŒã«ã«ã§ãšã¯ã¹ããã€ããèµ·åããæªæã®ãããªã³ã¯ãæ·»ä»ãã¡ã€ã«ãéãããã«éšãããŸãã
æªæã®ããæ»æè ããªãŒãã³ãœãŒã¹éçºè ã®ã¢ã«ãŠã³ãã䟵害ããåºãé åžãããŠããã³ãŒãã«ãšã¯ã¹ããã€ããæ³šå ¥ããŸãã
䟵害ãããã¯ã©ãŠããµãŒããŒã¯ãåãã€ã³ãã©ã¹ãã©ã¯ãã£äžã®ãã¹ãŠã®VMãã³ã³ãããã¢ããªã±ãŒã·ã§ã³ã顧客ããŒã¿ããŒã¹ãé²åºãããå¯èœæ§ããããŸãã
â ïž ç®¡çãããéé¢ç°å¢ã®ã¿ â å€éšãããã¯ãŒã¯ã¢ã¯ã»ã¹ã®ãªãVMïŒ
# å¿
èŠãªããŒã«
sudo apt install -y git build-essential libssl-dev bc flex bison
# çŸåšã®ã«ãŒãã«ããŒãžã§ã³ã確èª
uname -r
# è匱ãªç¯å²ïŒâ€ 7.0ïŒã«ããã確èª
# è匱ãªåºåäŸ: 6.8.0-51-generic
# 1. éé¢ãããVMãäœæïŒæšå¥šïŒVirtualBoxãŸãã¯QEMUïŒ
# Ubuntu 24.04ãŸãã¯Debian Bookwormã®ISOã䜿çš
# 2. VMãæ¬çªã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ã§ããªãããšã確èª
# ïŒãã¹ããªã³ãªãŒãããã¯ãŒã¯ãŸãã¯éé¢ãããNATã䜿çšïŒ
# 3. æ»æè
ãã·ãã¥ã¬ãŒãããããã®æš©éã®ãªããŠãŒã¶ãŒãäœæ
sudo adduser testuser
su - testuser
# 4. testuserã«sudoããªãããšã確èª
sudo whoami # æ»ãå€: "testuser is not in the sudoers file"
# æ€èšŒã¹ã¯ãªããïŒæªçšããã確èªã®ã¿ïŒ
#!/bin/bash
KERNEL_VERSION=$(uname -r | cut -d. -f1,2)
MAJOR=$(echo $KERNEL_VERSION | cut -d. -f1)
MINOR=$(echo $KERNEL_VERSION | cut -d. -f2)
echo "[*] æ€åºãããã«ãŒãã«: $(uname -r)"
if [ "$MAJOR" -lt 7 ] || ([ "$MAJOR" -eq 7 ] && [ "$MINOR" -eq 0 ]); then
echo "[!] CVE-2026-31431ïŒCopyFailïŒã«å¯ŸããŠæœåšçã«è匱"
echo "[!] ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãã³ããŒãããããé©çšããã確èªããŠãã ãã"
else
echo "[+] ã«ãŒãã«ããŒãžã§ã³ã¯åœ±é¿ç¯å²å€"
fi
# ããããé©çšãããã確èªïŒããã±ãŒãžã®å€æŽãã°çµç±ïŒ
apt changelog linux-image-$(uname -r) 2>/dev/null | grep -i "CVE-2026-31431" && \
echo "[+] 倿Žãã°ã§CVE-2026-31431ããããèŠã€ãããŸãã" || \
echo "[?] 倿Žãã°ã§ããããæ€åºãããŸããã§ãã â æåã§ç¢ºèªããŠãã ãã"
ð ãã®ã»ã¯ã·ã§ã³ã¯å³å¯ã«æè²ç®çã§ãã以äžã®ã³ãŒãã¯æ»æãã¯ãã«ã®ç°¡ç¥åãããæè²çšè¡šçŸã§ãããå®éã®ãšã¯ã¹ããã€ãã§ã¯ãããŸããïŒå«ççãªçç±ããããã§ã¯å ¬éãããŠããŸããïŒã
#!/usr/bin/env python3
"""
CVE-2026-31431ïŒCopyFailïŒâ æè²çšè¡šçŸ
ç®ç: æ»æç/é²åŸ¡çã»ãã¥ãªãã£æè²
èš±å¯ãªãã·ã¹ãã ã§äœ¿çšããªãã§ãã ãã
"""
import ctypes
import os
import sys
def check_environment():
"""ã©ãç°å¢ã«ããã確èª"""
kernel = os.uname().release
print(f"[*] ã«ãŒãã«: {kernel}")
print(f"[*] çŸåšã®UID: {os.getuid()}")
if os.getuid() == 0:
print("[-] ãã§ã«rootã§ãããšã¯ã¹ããã€ãã¯äžèŠã§ãã")
sys.exit(0)
def demonstrate_concept():
"""
æ»æãã¯ãã«ã®æŠå¿µãã¢ã³ã¹ãã¬ãŒã·ã§ã³:
1. è匱ãªsyscallãç¹å®
2. äžå®å
šãªã³ããŒãããªã¬ãŒãããã€ããŒããæ§ç¯
3. ã¡ã¢ãªç Žæãç£èŠ
4. æš©éææ Œã®ããã«ãããŒããªãã€ã¬ã¯ã
å®éã®ãšã¯ã¹ããã€ãã§ã¯:
- æ»æè
ã¯ããŒãã¹ãã¬ãŒãROPãã§ãŒã³ãªã©ã®æè¡ã䜿çš
- ç Žæãšç ŽæããŒã¿ã®äœ¿çšã®éã®ãŠã£ã³ããŠãæªçš
- ããã»ã¹ã®è³æ Œæ
å ±ãäžæžãïŒuid â 0ïŒ
"""
print("[*] æŠå¿µ: æ¬ é¥ã®ããã³ããŒã«ãŒãã³ã®ããªã¬ãŒ")
print("[*] æŠå¿µ: kernel_bufferæ§é äœã®ç Žæãç£èŠ")
print("[*] æŠå¿µ: å®è¡ãããŒã®ãªãã€ã¬ã¯ã")
print("[*] åç
§: https://xint.io/blog/copy-fail-linux-distributions")
def main():
check_environment()
demonstrate_concept()
print("\n[i] å®å
šãªæè¡åæã«ã€ããŠã¯ã以äžãåç
§ããŠãã ãã:")
print(" â https://xint.io/blog/copy-fail-linux-distributions")
print(" â https://www.microsoft.com/en-us/security/blog/2026/05/01/cve-2026-31431-copy-fail-vulnerability-enables-linux-root-privilege-escalation/")
if __name__ == "__main__":
main()
# å¥ã®ã¿ãŒããã«ã§ã«ãŒãã«ãã°ãç£èŠ
sudo dmesg -w | grep -E "(oops|panic|null pointer|exploit|cve)"
# ã·ã¹ãã ã³ãŒã«ãç£èŠ
sudo strace -e trace=all -p <ããã»ã¹PID>
# UIDã®å€æŽããªã¢ã«ã¿ã€ã ã§ç¢ºèª
watch -n 0.5 'cat /proc/self/status | grep -E "^(Uid|Gid)"'
# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y linux-image-generic
sudo reboot
# åèµ·ååŸã«ããŒãžã§ã³ã確èª
uname -r
# Red Hat / CentOS / Amazon Linux
sudo dnf update -y kernel
sudo reboot
# SUSE
sudo zypper update -t package kernel-default
sudo reboot
# ã€ã³ã¹ããŒã«æžã¿ã«ãŒãã«ã®å€æŽãã°ã確èª
apt changelog linux-image-$(uname -r) | grep CVE-2026-31431
# Ubuntuã®CVEãã©ãã«ãŒçµç±
# https://ubuntu.com/security/CVE-2026-31431
# Red Hat CVEããŒã¿ããŒã¹çµç±
# https://access.redhat.com/security/cve/CVE-2026-31431
# SUIDãã€ããªã®å®è¡ãå¶éïŒæ»æå¯Ÿè±¡é åãåæžïŒ
find / -perm -4000 -type f 2>/dev/null
# çãããsyscallã®ç£æ»ãæå¹å
sudo auditctl -a always,exit -F arch=b64 -S all -k syscall_audit
# æš©éææ Œã®è©Šã¿ãç£èŠ
sudo apt install -y auditd
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/sudoers -p wa -k sudoers_changes
# ã«ãŒãã«ä¿è·ãæå¹å
# /etc/sysctl.conf â 以äžã远å :
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.perf_event_paranoid = 3
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2
# é©çš
sudo sysctl -p
# æªçšã®å¯èœæ§ã®ããå
å:
# 1. rootãšããŠå®è¡ãããŠããäžè¬ãŠãŒã¶ãŒã®ããã»ã¹
ps aux | awk '$1 != "root" && $2 == "0"'
# 2. æè¿äœæãããæ°ããSUIDãã€ããª
find / -perm -4000 -newer /etc/passwd -type f 2>/dev/null
# 3. /etc/passwdã®äžå¯©ãªãšã³ããª
grep "uid=0" /etc/passwd
# 4. ç Žæã¡ãã»ãŒãžãå«ãã«ãŒãã«ãã°
dmesg | grep -iE "(oops|BUG:|corruption|cve)"
# 5. èš±å¯ãããŠããªããããã¯ãŒã¯æ¥ç¶
ss -tulnp | grep LISTEN
ããã管çã¯éèŠ â ã¢ããã¹ããªãŒã ãããã¯çŽ1é±éã§å©çšå¯èœã§ãããããã£ã¹ããªãã¥ãŒã·ã§ã³ãé ä¿¡ããã«ã¯ããã«æéãããããŸãããã³ããŒãç©æ¥µçã«ç£èŠããŠãã ããã
å€å±€é²åŸ¡ â LPEåç¬ã§ã¯äžååã§ããæ»æè ã¯åæã¢ã¯ã»ã¹ãå¿ èŠã§ããã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããŠãã ããã
è匱æ§ã®é£é â åç¬ã§ã¯ãäœãªã¹ã¯ãã®CVEã§ããçµã¿åããããšé倧ã«ãªãå¯èœæ§ããããŸããCVSSåç¬ã§ã¯ãªããã³ã³ããã¹ãã§ãªã¹ã¯ãè©äŸ¡ããŠãã ããã
ãµãã©ã€ãã§ãŒã³ã¯çŸå®ã®ãã¯ãã« â åºã䜿çšãããŠãããªãŒãã³ãœãŒã¹ã³ãŒãã¯æ»æãã¯ãã«ã«ãªãåŸãŸããããã±ãŒãžã®æŽåæ§æ€èšŒãå®è£ ããŠãã ããã
Kubernetesãšã³ã³ããã¯å ç«ã§ã¯ãªã â ãã¹ãã«ãŒãã«ãè匱ãªå Žåããã®äžã®ã³ã³ããã圱é¿ãåããŸãã
åžžã«å®å šãªæ§é äœãã³ã㌠â ã«ãŒãã«å¶åŸ¡æ§é äœã®åã ã®ãã£ãŒã«ããããã¹ãŠã®éèŠãªãã£ãŒã«ããåæåãããããšãä¿èšŒããã«ã³ããŒããªãã§ãã ããã
copy_from_user()ãæ£ããäœ¿çš â ã«ãŒãã«ã®ã³ããŒé¢æ°ã«ã¯ç¹å®ã®ã»ãã³ãã£ã¯ã¹ããããŸãã䜿çšåã«ããã¥ã¡ã³ããèªãã§ãã ããã
ã»ãã¥ãªãã£ã³ãŒãã¬ãã¥ãŒ â ã«ãŒãã«ã®å€æŽã«ã¯ãæ©èœæ§ã ãã§ãªãã»ãã¥ãªãã£ã«çŠç¹ãåœãŠãã¬ãã¥ãŒãå¿ èŠã§ãã
ã«ãŒãã«æŽæ°ã¯åªå äºé â åãªãã宿çãªã¡ã³ããã³ã¹ãã§ã¯ãããŸãããã«ãŒãã«ã®è匱æ§ã¯ãã°ãã°é倧ã§ãã
è³ç£ã€ã³ãã³ããªã¯äžå¯æ¬ â ååšãç¥ããªããã®ã¯ä¿®æ£ã§ããŸãããLinuxã·ã¹ãã ãšãã®ã«ãŒãã«ããŒãžã§ã³ã®ææ°ã®ã€ã³ãã³ããªãç¶æããŠãã ããã
ã€ã³ã·ãã³ã察å¿èšç» â CISA KEVã®ãããªæ»æçãªæéãæã€é倧ãªè匱æ§ã«åãããã¬ã€ããã¯ãçšæããŠãã ããã
å€ãæ å ±ãèŠã€ããå Žåããã¹ãã·ããªãªã远å ãããå Žåã¯ãissueãŸãã¯PRãéããŠãã ããïŒ
è¡åèŠç¯ãå°éããŠãã ããïŒãã®ãªããžããªã¯æè²ãšé²åŸ¡ã®ããã®ãã®ã§ã â æªæã®ããæŽ»åã®ããã§ã¯ãããŸããã
MITã©ã€ã»ã³ã¹ â ã·ã¹ãã ã®åŠç¿ãæè²ãé²åŸ¡ã«äœ¿çšããŠãã ãããæ»æã«ã¯æ±ºããŠäœ¿çšããªãã§ãã ããã
ãæ»æãç¥ãããšã¯ãé²åŸ¡ãæ§ç¯ããããã®ç¬¬äžæ©ã§ããã
â ãã®ã±ãŒã¹ã¹ã¿ãã£ã圹ã«ç«ã£ãå Žåã¯ããªããžããªã«ã¹ã¿ãŒãæ®ããŠãã ããïŒ
| é ç® | 詳现 |
|---|
| CVE ID | CVE-2026-31431 |
| éç§° | CopyFail |
| çš®å¥ | ããŒã«ã«æš©éææ ŒïŒLPEïŒ |
| CVSSã¹ã³ã¢ | 8.8ïŒé«ïŒ / é£éã«ããé倧ã«ãªãå¯èœæ§ |
| ã³ã³ããŒãã³ã | Linuxã«ãŒãã« â ããŒã¿ã³ããŒæ©æ§ |
| 圱é¿ããŒãžã§ã³ | Linuxã«ãŒã㫠†7.0ïŒ2017幎以éã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ïŒ |
| çºèŠè | TheoriïŒã»ãã¥ãªãã£äŒæ¥ïŒ |
| å ¬éæ¥ | 2026幎3æ |
| ã¢ããã¹ããªãŒã ããã | 責任ããé瀺ããçŽ1é±éåŸã«å ¬é |
| CISAã¹ããŒã¿ã¹ | ç©æ¥µçã«æªçšãããŠãããšããŠç»é² â KEVã«ã¿ãã° |
| CISAæé | é£éŠæ¿åºæ©é¢ã¯2026幎5æ15æ¥ãŸã§ã«ä¿®æ£ããå¿ èŠãã |
| ãã£ã¹ããªãã¥ãŒã·ã§ã³ | ããŒãžã§ã³ | ã¹ããŒã¿ã¹ |
|---|
| Red Hat Enterprise Linux | 10.1 | â è匱 |
| Ubuntu LTS | 24.04 | â è匱 |
| Amazon Linux | 2023 | â è匱 |
| SUSE Linux | 16 | â è匱 |
| Debian | ææ°ã®å®å®ç | â è匱 |
| Fedora | ææ°ç | â è匱 |
| KubernetesïŒããŒãïŒ | ã«ãŒãã«â€7.0äžã®ãã¹ãŠ | â è匱 |