
# CVE-2026-31431 के लिए Seccomp-आधारित शमन, एक Linux कर्नेल LPE। PAM मॉड्यूल और स्टैंडअलोन रैपर के माध्यम से AF_ALG सॉकेट को ब्लॉक करता है, पैच किए गए कर्नेल का स्वतः-पता लगाने के साथ।
CVE-2026-31431 के लिए एक हल्का, प्रतिवर्ती seccomp-आधारित शमन, जो Linux कर्नेल के algif_aead / authencesn क्रिप्टो सबसिस्टम में एक स्थानीय विशेषाधिकार वृद्धि भेद्यता है।
प्रकार: स्थानीय विशेषाधिकार वृद्धि (LPE)
प्रभावित घटक: Linux कर्नेल crypto/algif_aead.c - इन-प्लेस AEAD संचालन
हमला प्रिमिटिव: authencesn AEAD एल्गोरिदम के स्क्रैच-राइट पथ के माध्यम से किसी भी पठनीय फ़ाइल के पेज कैश में 4-बाइट नियंत्रणीय लेखन। /etc/passwd को लक्षित करके, एक हमलावर अपना UID 0 (रूट) में बदल सकता है और su के माध्यम से रूट शेल प्राप्त कर सकता है।
प्रभावित कर्नेल: कर्नेल 6.12+, 6.17+, 6.18+ पर पुष्टि की गई, और RHEL/CentOS 4.18/5.14 कर्नेल पर भी पुनरुत्पादित किया गया।
सत्यापित वातावरण: Rocky Linux 8 (कर्नेल 4.18) और Rocky Linux 9 (कर्नेल 5.14) - शोषण पूरी तरह से अवरुद्ध, सुरक्षित निष्कासन की पुष्टि की गई।
मूल कारण: कमिट 72548b093ee3 ने इन-प्लेस AEAD संचालन पेश किया। जब स्प्लिस्ड पेज-कैश पृष्ठों को गंतव्य स्कैटरलिस्ट के रूप में उपयोग किया जाता है, तो AEAD डिक्रिप्ट के दौरान AAD seqno_lo फ़ील्ड गलती से पेज-कैश में वापस लिखा जाता है।
अपस्ट्रीम फिक्स: आउट-ऑफ-प्लेस AEAD संचालन पर वापस लौटें।
इस समाधान के दो घटक हैं:
PAM मॉड्यूल (pam_block_afalg.so) - प्राथमिक सुरक्षा। सत्र खोलने के दौरान PAM द्वारा लोड किया गया (pam_sm_open_session), यह एक seccomp BPF फ़िल्टर लागू करता है जो किसी भी उपयोगकर्ता कोड के चलने से पहले socket(AF_ALG, ...) को अवरुद्ध करता है। यह सभी PAM-प्रमाणित सत्रों को कवर करता है: su -c, su -, SSH, TTY लॉगिन, आदि।
स्टैंडअलोन बाइनरी (block_afalg) - वैकल्पिक। गैर-PAM परिदृश्यों के लिए विशिष्ट प्रोग्रामों को लपेट सकता है (जैसे, cron जॉब्स, systemd सेवाएं, मैन्युअल आह्वान)।
seccomp फ़िल्टर:
socket(AF_ALG, ...) को अवरुद्ध करता है (EACCES लौटाता है)setuid, su, sudo सहित)PAM सत्र खुलता है (su, ssh, login, आदि)
|
v
pam_block_afalg.so (pam_sm_open_session)
|
+-- जांचें: क्या कर्नेल भेद्य है? (socket(AF_ALG) आज़माएं)
| |
| +-- नहीं --> PAM_SUCCESS लौटाएं (नो-ऑप)
| |
| +-- हां --> 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 के बिना संकलित होता है)। |
block_afalg.c | स्टैंडअलोन seccomp रैपर बाइनरी। गैर-PAM उपयोग के लिए। |
deploy.sh | परिनियोजन स्क्रिप्ट। PAM मॉड्यूल को संकलित, स्थापित और प्रबंधित करता है। |
gcc (संकलन के लिए)libpam (रनटाइम, आमतौर पर पहले से स्थापित)# 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 का सीधे उपयोग करें:
# संकलित करें
gcc -Wall -O2 -o block_afalg block_afalg.c
# AF_ALG अवरुद्ध के साथ कमांड चलाएं
./block_afalg python3 your_script.py
./block_afalg bash
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')
"
# 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
__NR_socket x86_64 पर) हार्डकोड करता है। अन्य आर्किटेक्चर के लिए सिस्कॉल नंबर अपडेट करने की आवश्यकता है।exec() कॉल कवर नहीं होते (उनके लिए block_afalg का उपयोग करें)।remove के साथ सफाई कर सकते हैं।yum update kernel फिर मॉड्यूल हटाएं।यह टूल केवल अधिकृत सुरक्षा परीक्षण और रक्षात्मक उद्देश्यों के लिए प्रदान किया गया है। केवल उन सिस्टम पर उपयोग करें जिनके आप मालिक हैं या जिनका मूल्यांकन करने के लिए आप स्पष्ट रूप से अधिकृत हैं।