## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-LINUX-ZS-CVE-2026-31431-MITIGATION
# CVE-2026-31431 seccomp μν
CVE-2026-31431μ μν κ°λ³κ³ λλ릴 μ μλ seccomp κΈ°λ° μν λꡬμ
λλ€. μ΄ μ·¨μ½μ μ Linux 컀λμ `algif_aead` / `authencesn` μνΈν μλΈμμ€ν
μμ λ°μνλ λ‘컬 κΆν μμΉ μ·¨μ½μ μ
λλ€.
δΈζζζ‘£
* * *
## μ·¨μ½μ κ°μ
**μ ν:** λ‘컬 κΆν μμΉ(LPE)
**μν₯μ λ°λ κ΅¬μ± μμ:** Linux 컀λ `crypto/algif_aead.c` \- μ μ리(in-place) AEAD μ°μ°
**곡격 μ리:** `authencesn` AEAD μκ³ λ¦¬μ¦μ μ€ν¬λμΉ μ°κΈ° κ²½λ‘λ₯Ό ν΅ν΄ μ½κΈ° κ°λ₯ν λͺ¨λ νμΌμ νμ΄μ§ μΊμμ 4λ°μ΄νΈ μ μ΄ κ°λ₯ν μ°κΈ°λ₯Ό μνν©λλ€. `/etc/passwd`λ₯Ό λμμΌλ‘ 곡격μλ μμ μ UIDλ₯Ό 0(root)μΌλ‘ λ³κ²½νκ³ `su`λ₯Ό ν΅ν΄ λ£¨νΈ μ
Έμ μ»μ μ μμ΅λλ€.
**μν₯μ λ°λ 컀λ:** 컀λ 6.12+, 6.17+, 6.18+μμ νμΈλμμΌλ©°, RHEL/CentOS 4.18/5.14 컀λμμλ μ¬νλμμ΅λλ€.
**κ²μ¦λ νκ²½:** Rocky Linux 8(컀λ 4.18) λ° Rocky Linux 9(컀λ 5.14) - μ
μ©μ΄ μμ ν μ°¨λ¨λμμΌλ©°, μμ ν μ κ±°κ° νμΈλμμ΅λλ€.
**κ·Όλ³Έ μμΈ:** μ»€λ° `72548b093ee3`μ΄ μ μ리(in-place) AEAD μ°μ°μ λμ
νμ΅λλ€. μ€νλΌμ΄μ€λ νμ΄μ§ μΊμ νμ΄μ§κ° λμ scatterlistλ‘ μ¬μ©λ λ, AAD `seqno_lo` νλκ° AEAD 볡νΈν μ€ νμ΄μ§ μΊμμ μλͺ» λ€μ μ°μ¬μ§λλ€.
**μ
μ€νΈλ¦Ό μμ :** μ μ리(out-of-place) AEAD μ°μ°μΌλ‘ λλ리기.
## μ΄ μν λꡬμ μλ λ°©μ
μ΄ μ루μ
μ **λ κ°μ§ κ΅¬μ± μμ** λ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€:
1. **PAM λͺ¨λ(`pam_block_afalg.so`)** \- κΈ°λ³Έ λ°©μ΄ μλ¨μ
λλ€. PAMμ΄ μΈμ
μμ μ(`pam_sm_open_session`) λ‘λνλ©°, μ¬μ©μ μ½λκ° μ€νλκΈ° μ μ `socket(AF_ALG, ...)`μ μ°¨λ¨νλ seccomp BPF νν°λ₯Ό μ μ©ν©λλ€. μ΄λ λͺ¨λ PAM μΈμ¦ μΈμ
μ ν¬κ΄ν©λλ€: `su -c`, `su -`, SSH, TTY λ‘κ·ΈμΈ λ±.
2. **λ
립 μ€ν λ°μ΄λ리(`block_afalg`)** \- μ ν μ¬νμ
λλ€. λΉ-PAM μλ리μ€(μ: cron μμ
, systemd μλΉμ€, μλ νΈμΆ)μμ νΉμ νλ‘κ·Έλ¨μ κ°μ μ μμ΅λλ€.
seccomp νν°:
* `socket(AF_ALG, ...)`λ§ μ°¨λ¨ν©λλ€(EACCES λ°ν)
* λ€λ₯Έ λͺ¨λ μμ€ν
μ½( `setuid`, `su`, `sudo` ν¬ν¨)μλ μν₯μ΄ μμ΅λλ€
* λͺ¨λ μμ νλ‘μΈμ€μ μμλ©λλ€(fork + exec)
* ν¨μΉλ 컀λμ μλ κ°μ§νμ¬ no-opμ΄ λ©λλ€
## μν€ν
μ²
root@kitploit:~
PAM μΈμ
μμ (su, ssh, login λ±)
|
v
pam_block_afalg.so (pam_sm_open_session)
|
+-- νμΈ: 컀λμ΄ μ·¨μ½νκ°? (socket(AF_ALG) μλ)
| |
| +-- μλμ€ --> PAM_SUCCESS λ°ν (no-op)
| |
| +-- μ --> prctl(PR_SET_SECCOMP, BPF νν°)
| |
| +-- seccomp νν°κ° sshd μμ νλ‘μΈμ€μ μ μ©λ¨
| +-- μ¬μ©μ μ
Έκ³Ό λͺ¨λ μμ νλ‘μΈμ€μ μμλ¨
| +-- socket(AF_ALG, ...)μ΄ EACCES λ°ν
v
μ¬μ©μ μ
Έ / λͺ
λ Ήμ΄ seccomp 보νΈμ ν¨κ» μ€νλ¨
|
+-- su, sudo λ° κΈ°ν λͺ¨λ μμ€ν
μ½μ μ μ μλ
+-- AF_ALG μμΌλ§ μ°¨λ¨λ¨
## νμΌ
νμΌ| μ©λ
---|---
`pam_block_afalg.c`| PAM λͺ¨λ μμ€. μΈμ
μμ μ seccomp νν°λ₯Ό μ μ©ν©λλ€.
`pam_minimal.h`| μ΅μ PAM νμ
μ μ(pam-devel μμ΄ μ»΄νμΌ κ°λ₯).
## μꡬ μ¬ν
* seccompλ₯Ό μ§μνλ Linux 컀λ(λλΆλΆμ μ΅μ 컀λ)
* `gcc`(μ»΄νμΌμ©)
* `libpam`(λ°νμ, μΌλ°μ μΌλ‘ μ¬μ μ€μΉλ¨)
* 루νΈ/sudo μ κ·Ό κΆν(μ€μΉμ©)
* x86_64 μν€ν
μ²(BPF νν°κ° x86_64 μμ€ν
μ½ λ²νΈλ₯Ό μ¬μ©)
## λΉ λ₯Έ μμ
root@kitploit:~
# 1. PAM λͺ¨λ μ»΄νμΌ
gcc -Wall -O2 -fPIC -shared -o pam_block_afalg.so pam_block_afalg.c \
/usr/lib64/libpam.so.0
# 2. μ€μΉ (su, sshd, loginμ PAM κ΅¬μ± μλ μΆκ°)
sudo ./deploy.sh install
# 3. νμΈ (μ μΈμ
μ΄μ΄μΌ ν¨)
cat /proc/self/status | grep Seccomp
# νμλμ΄μΌ ν¨: Seccomp: 2
python3 -c "
import socket
try:
s = socket.socket(38,2,0); s.close()
print('VULNERABLE')
except OSError:
print('BLOCKED')
"
# νμλμ΄μΌ ν¨: BLOCKED
# 4. μ κ±°
sudo ./deploy.sh remove
## λͺ
λ Ή μ°Έμ‘°
λͺ
λ Ή| μ€λͺ
---|---
`deploy.sh install`| PAM λͺ¨λ μ»΄νμΌ, `/lib64/security/`μ μ€μΉ, PAM κ΅¬μ± μλ μΆκ°
`deploy.sh remove`| μ 체 μ κ±°: λͺ¨λ μ κ±°, PAM κ΅¬μ± μ 리, νμΌ μμ
`deploy.sh status`| μ€μΉ μν, PAM ꡬμ±, 컀λ μν νμ
## λ
립 μ€ν μ¬μ©λ²
λΉ-PAM μλ리μ€μ κ²½μ° `block_afalg`λ₯Ό μ§μ μ¬μ©νμΈμ:
root@kitploit:~
# μ»΄νμΌ
gcc -Wall -O2 -o block_afalg block_afalg.c
# AF_ALGκ° μ°¨λ¨λ μνλ‘ λͺ
λ Ή μ€ν
./block_afalg python3 your_script.py
./block_afalg bash
## κ²μ¦
### 컀λμ΄ μ·¨μ½νμ§ νμΈ
root@kitploit:~
python3 -c "
import socket
try:
s = socket.socket(38, socket.SOCK_SEQPACKET, 0)
s.close()
print('VULNERABLE: AF_ALG socket available')
except:
print('SAFE: AF_ALG socket blocked or unavailable')
"
### PAM λͺ¨λμ΄ νμ± μνμΈμ§ νμΈ
root@kitploit:~
# seccomp μν νμΈ
cat /proc/self/status | grep Seccomp
# Seccomp: 0 = 보νΈλμ§ μμ
# Seccomp: 2 = 보νΈλ¨
# AF_ALG μμΌ ν
μ€νΈ
python3 -c "
import socket
try:
s = socket.socket(38,2,0)
s.close()
print('AF_ALG available - NOT protected')
except OSError:
print('AF_ALG blocked - PROTECTED')
"
# PAM λ‘κ·Έ νμΈ
grep pam_block_afalg /var/log/secure
# νμλμ΄μΌ ν¨: seccomp filter applied, AF_ALG blocked
## μ ν μ¬ν
* **x86_64 μ μ©:** BPF νν°κ° μμ€ν
μ½ λ²νΈ 41(`x86_64μ __NR_socket`)μ νλμ½λ©ν©λλ€. λ€λ₯Έ μν€ν
μ²λ μμ€ν
μ½ λ²νΈλ₯Ό μ
λ°μ΄νΈν΄μΌ ν©λλ€.
* **PAM μμ‘΄μ :** PAMμ ν΅κ³Όνλ μΈμ
λ§ λ³΄νΈν©λλ€. PAM μμ΄ μ§μ `exec()` νΈμΆνλ κ²½μ°λ ν¬ν¨λμ§ μμ΅λλ€(μ΄ κ²½μ° `block_afalg` μ¬μ©).
* **λ°νμ λΉνμ±ν λΆκ°:** seccomp νν°κ° νλ‘μΈμ€μ μ μ©λλ©΄ μ κ±°ν μ μμ΅λλ€. 컀λ νμΈμ ν΅ν΄ νμν κ²½μ°μλ§ μ μ©λλλ‘ λ³΄μ₯ν©λλ€.
* **μ μΈμ
λ§ ν΄λΉ:** λͺ¨λ μ€μΉ μ μ μμλ κΈ°μ‘΄ μΈμ
μ μκΈ λ³΄νΈλμ§ μμ΅λλ€.
## μ κ±° μμ
1. **곡μ 컀λ ν¨μΉκ° μ μ©λ κ²½μ°** \- PAM λͺ¨λμ΄ μ΄λ₯Ό μλ κ°μ§νμ§λ§, `remove`λ‘ μ 리ν μ μμ΅λλ€.
2. **RHEL/CentOSκ° ν¨μΉλ 컀λμ μΆμν κ²½μ°** \- `yum update kernel` ν λͺ¨λμ μ κ±°νμΈμ.
## λΌμ΄μ μ€
μ΄ λꡬλ 곡μΈλ 보μ ν
μ€νΈ λ° λ°©μ΄ λͺ©μ μΌλ‘λ§ μ 곡λ©λλ€. μμ ν μμ€ν
λλ λͺ
μμ μΌλ‘ νκ° κΆνμ΄ λΆμ¬λ μμ€ν
μμλ§ μ¬μ©νμΈμ.