अपडेट पर वापस जाएँ
New releaseAug 17, 2026

vcheck v1.6.3

कॉपी फेल और डर्टी फ्रैग बग्स (CVE-2026-31431, CVE-2026-43284, CVE-2026-43500) के लिए भेद्यता पहचान और शमन उपकरण

साझा करें

vcheck

SSH पर एक दूरस्थ Linux होस्ट की Copy Fail और Dirty Frag कर्नेल-मॉड्यूल vulnerabilities के लिए ऑडिट करें और, वैकल्पिक रूप से, शमन उपाय लागू करें:

CVEनामप्रभावित मॉड्यूल
CVE-2026-31431Copy Failalgif_aead
CVE-2026-43284Dirty Frag (IPsec)esp4, esp6, ipcomp4, ipcomp6, xfrm_user
CVE-2026-43500Dirty Frag (RxRPC)rxrpc, kafs

प्रत्येक प्रभावित मॉड्यूल के लिए, vcheck रिपोर्ट करता है कि क्या वह वर्तमान में लोड है, चालू कर्नेल में बिल्ट-इन है, कर्नेल लॉग में पिछले निशान हैं, लाइव AF_ALG सॉकेट हैं (केवल Copy Fail के लिए), और क्या वह /etc/modprobe.d/ के अंतर्गत पहले से ब्लैकलिस्टेड है।

-fix के साथ, vcheck प्रारंभिक स्थिति की रिपोर्ट करता है, किसी भी मॉड्यूल के लिए जो अभी तक ब्लैकलिस्टेड नहीं है, एक cve-XXXX-XXXXX-disable.conf स्निपेट लिखता है, फिर जाँचों को फिर से चलाता है और अंतिम स्थिति की रिपोर्ट करता है। -fix -unload के साथ, vcheck फिक्स से पहले लोड किए गए प्रभावित मॉड्यूल को अनलोड करने का भी प्रयास करता है, फिर यह सत्यापित करने के लिए अंतिम स्कैन का उपयोग करता है कि वे अभी भी लोड हैं या नहीं। -fix -rebuild-initramfs के साथ, vcheck स्निपेट लिखे जाने के बाद केवल चालू कर्नेल के लिए initramfs को पुनर्निर्मित करता है, ताकि ब्लैकलिस्ट अगले बूट इमेज में बेक हो जाए। पुराने कर्नेल प्रविष्टियाँ फ़ॉलबैक के रूप में अपने मूल initramfs को बनाए रखती हैं।

-fix का उपयोग केवल check-only run के बाद करें

हमेशा पहले -fix के बिना vcheck चलाएँ। रिपोर्ट पढ़ें और -fix के साथ फिर से चलाने से पहले पुष्टि करें कि प्रभावित मॉड्यूल इस होस्ट पर अक्षम करना सुरक्षित है। कर्नेल मॉड्यूल को अक्षम करना जो वैध कार्यभार पर निर्भर हैं, उपयोगकर्ताओं को प्रभावित कर सकता है और एप्लिकेशन को तोड़ सकता है।

विशेष रूप से:

  • -fix को केवल तब सुरक्षित मानें जब कोई भी प्रभावित मॉड्यूल वर्तमान में लोड न हो — यानी प्रत्येक मॉड्यूल को mitigated या module not blacklisted (कोई VULNERABLE या blacklisted but currently loaded पंक्तियाँ नहीं) के रूप में रिपोर्ट किया गया हो। एक लोडेड मॉड्यूल लगभग हमेशा इसका मतलब है कि होस्ट पर कुछ सक्रिय रूप से इसका उपयोग कर रहा है; ब्लैकलिस्ट करने से पहले इसे सत्यापित करें।
  • IPsec मॉड्यूल (esp4, esp6, ipcomp4, ipcomp6, xfrm_user) किसी भी IPsec/strongSwan/WireGuard-over-IPsec/IKE तैनाती के लिए आवश्यक हैं। ipcomp4/ipcomp6 मॉड्यूल IPComp पेलोड कम्प्रेशन को लागू करते हैं और स्पष्ट रूप से कॉन्फ़िगर न होने पर भी IPsec SA के भाग के रूप में ऑटो-नेगोशिएट हो सकते हैं। VPN गेटवे, IPsec एंडपॉइंट, या कहीं भी जहाँ ip xfrm policy नियम लौटाता है, उनमें से किसी को भी ब्लैकलिस्ट न करें। ध्यान दें कि xfrm_algo फ्रेमवर्क मॉड्यूल जानबूझकर इस सूची में नहीं है — विक्रेता मार्गदर्शन (Red Hat, Ubuntu, AWS) के अनुसार, ESP और IPComp प्रोटोकॉल मॉड्यूल और xfrm_user नेटलिंक कॉन्फ़िगरेशन इंटरफ़ेस को ब्लॉक करना पर्याप्त है, और xfrm_algo को ब्लैकलिस्ट करने से बिना किसी अतिरिक्त लाभ के हर दूसरे xfrm ट्रांसफ़ॉर्म को तोड़ देगा।
  • RxRPC मॉड्यूल (rxrpc, kafs) किसी भी होस्ट के लिए आवश्यक हैं जो AFS फ़ाइल सिस्टम माउंट करता है। उन्हें अक्षम करने से अगले बूट पर वे माउंट टूट जाएंगे।
  • algif_aead AF_ALG सॉकेट फैमिली के माध्यम से कर्नेल क्रिप्टो को उजागर करता है। इसका सीधे एप्लिकेशन कोड द्वारा शायद ही कभी उपयोग किया जाता है, लेकिन ब्लैकलिस्ट करने से पहले लाइव सॉकेट्स (ss -p --af-alg) की सूची बनाकर और यूज़रस्पेस उपभोक्ताओं की जाँच करके सत्यापित करें।

vcheck द्वारा लिखे गए ब्लैकलिस्ट स्निपेट केवल मॉड्यूल-लोड समय पर प्रभावी होते हैं (आमतौर पर अगला बूट, या modprobe -r <module> जब सिस्टम निष्क्रिय हो)। एक मॉड्यूल जो पहले से लोड है -fix के बाद भी चलता रहेगा — vcheck इसे blacklisted but currently loaded; run 'modprobe -r' or reboot के रूप में रिपोर्ट करेगा। -unload को -fix के साथ पास करने पर vcheck को ब्लैकलिस्ट स्निपेट लिखने के बाद लोड किए गए प्रभावित मॉड्यूल के लिए modprobe -r चलाने का निर्देश मिलता है। इसका उपयोग केवल तभी करें जब आपने पुष्टि कर ली हो कि मॉड्यूल को चालू कर्नेल से निकालना सुरक्षित है।

-rebuild-initramfs को -fix के साथ पास करने पर केवल चालू कर्नेल के लिए initramfs पुनर्जीवित होता है (update-initramfs -u -k $(uname -r) Debian/Ubuntu पर, dracut -f --kver $(uname -r) RHEL/Fedora पर)। अन्य स्थापित कर्नेल अपने मौजूदा initramfs को अछूता रखते हैं, इसलिए यदि रिबूट के बाद कुछ गलत होता है तो आप बूट मेनू से कोई पुरानी कर्नेल प्रविष्टि चुन सकते हैं और रिकवर कर सकते हैं। भविष्य के कर्नेल इंस्टॉल वर्तमान /etc/modprobe.d/ स्थिति से अपना initramfs पुनर्निर्मित करते हैं, इसलिए बिना vcheck को फिर से चलाए ब्लैकलिस्ट स्वचालित रूप से प्रसारित होती है। यदि न तो update-initramfs और न ही dracut मौजूद है (जैसे Arch, Alpine, अपरिवर्तनीय इमेज), तो vcheck चेतावनी देता है और जारी रखता है — रिबूट करने से पहले डिस्ट्रो के टूल से मैन्युअल रूप से पुनर्निर्माण करें।

पुनर्निर्माण में कई मिनट लग सकते हैं (विशेषकर कई ड्राइवरों वाले होस्ट पर dracut), जो डायग्नोस्टिक -command-timeout को पार कर सकता है। यह अपने स्वयं के -initramfs-timeout (डिफ़ॉल्ट 10m) के अंतर्गत चलता है ताकि तेज़ जाँचों के लिए अपनी सीमित सीमा बनाए रखते हुए पुनर्निर्माण को आवश्यक समय मिल सके। धीमे हार्डवेयर के लिए -initramfs-timeout बढ़ाएँ, या टाइमआउट को पूरी तरह से अक्षम करने के लिए 0 पास करें। लंबे समय तक चलने वाले रिमोट कमांड के दौरान, vcheck डिफ़ॉल्ट रूप से हर 30s में SSH कीपअलाइव अनुरोध भेजता है ताकि NAT/फ़ायरवॉल निष्क्रियता टाइमर कनेक्शन को ड्रॉप न करें। इसे -ssh-keepalive से समायोजित करें, या अक्षम करने के लिए 0 पास करें।

स्थापना

Homebrew (macOS):

brew install --cask krisiasty/tap/vcheck

पूर्व-निर्मित बाइनरीज़ Linux, macOS और Windows के लिए रिलीज़ पेज पर प्रकाशित हैं।

स्रोत से (Go 1.26+ आवश्यक है):

go install github.com/krisiasty/vcheck@latest

उपयोग

vcheck -host HOST [flags]
ध्वजडिफ़ॉल्टविवरण
-host(आवश्यक)दूरस्थ होस्ट
-user$USERदूरस्थ उपयोगकर्ता
-port22दूरस्थ SSH पोर्ट
-agenttrueप्रमाणीकरण के लिए SSH एजेंट का उपयोग करें
-identity(खाली)एक निजी कुंजी फ़ाइल का पथ (एन्क्रिप्टेड होने पर पासफ़्रेज़ के लिए संकेत देता है)
-passwordfalseSSH पासवर्ड के लिए संकेत दें
-insecurefalseहोस्ट कुंजियाँ स्वीकार करें जो known_hosts में अभी तक दर्ज नहीं हैं; रिकॉर्ड की गई कुंजी के साथ बेमेल अभी भी विफल होगा
-fixfalseउन मॉड्यूल के लिए /etc/modprobe.d स्निपेट लिखें जो पहले से ब्लैकलिस्टेड नहीं हैं
-unloadfalse-fix के साथ, ब्लैकलिस्ट करने के बाद प्रभावित मॉड्यूल को अनलोड करें
-rebuild-initramfsfalse-fix के साथ, केवल चालू कर्नेल के लिए initramfs पुनर्निर्मित करें (update-initramfs या dracut)
-skip-logsfalseकर्नेल लॉग इतिहास जाँच छोड़ें
-timeout15sSSH कनेक्ट टाइमआउट
-ssh-keepalive30sSSH कीपअलाइव अंतराल (0 अक्षम करता है)
-command-timeout30sरिमोट कमांड टाइमआउट (0 अक्षम करता है)
-initramfs-timeout10minitramfs पुनर्निर्माण चरण के लिए टाइमआउट (0 अक्षम करता है); केवल -rebuild-initramfs के साथ उपयोग किया जाता है
-debugfalseलॉग वर्बोसिटी बढ़ाएँ
-versionfalseसंस्करण दिखाएँ और बाहर निकलें

-agent, -identity, या -password में से कम से कम एक को एक उपयोगी प्रमाणीकरण विधि उत्पन्न करनी चाहिए। विधियों को सूचीबद्ध क्रम में आज़माया जाता है।

लक्ष्य पर sudo आवश्यक है। यदि पासवर्डलेस sudo कॉन्फ़िगर किया गया है तो टूल चुपचाप आगे बढ़ता है; अन्यथा यह एक बार पासवर्ड के लिए संकेत देता है (इनपुट छिपा हुआ है) और इसे प्रत्येक बाद के कमांड के लिए sudo -S के माध्यम से फीड करता है।

निकास कोड

कोडअर्थ
0सभी प्रभावित मॉड्यूल ब्लैकलिस्टेड, अनलोडेड, बिल्ट इन नहीं, और निष्क्रिय हैं
1उपयोग त्रुटि
2SSH कनेक्शन विफल
3sudo प्रमाणीकरण विफल
4एक या अधिक मॉड्यूल ब्लैकलिस्टेड नहीं हैं (कोई वर्तमान एक्सपोज़र नहीं)
5एक या अधिक मॉड्यूल वर्तमान में लोडेड, कर्नेल में बिल्ट इन, या सक्रिय रूप से उपयोग में हैं
99आंतरिक/जाँच विफलता

नमूना आउटपुट

पूरी तरह से शमित होस्ट

$ vcheck -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF mitigated cve=CVE-2026-31431 module=algif_aead
INF mitigated cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs

अनशमित और आंशिक रूप से लोडेड — नंगी जाँच

$ vcheck -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR VULNERABLE cve=CVE-2026-43284 module=esp4 loaded=true
ERR module not blacklisted cve=CVE-2026-43284 module=esp6
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp4
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp6
ERR module not blacklisted cve=CVE-2026-43284 module=xfrm_user
ERR module not blacklisted cve=CVE-2026-43500 module=rxrpc
ERR module not blacklisted cve=CVE-2026-43500 module=kafs

-fix के साथ वही होस्ट — पहला रन

$ vcheck -fix -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF findings before fix
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR VULNERABLE cve=CVE-2026-43284 module=esp4 loaded=true
ERR module not blacklisted cve=CVE-2026-43284 module=esp6
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp4
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp6
ERR module not blacklisted cve=CVE-2026-43284 module=xfrm_user
ERR module not blacklisted cve=CVE-2026-43500 module=rxrpc
ERR module not blacklisted cve=CVE-2026-43500 module=kafs
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43284-disable.conf modules="[esp4 esp6 ipcomp4 ipcomp6 xfrm_user]"
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43500-disable.conf modules="[rxrpc kafs]"
INF re-scanning after fix snippets_written=2
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF findings after fix
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR blacklisted but currently loaded; run 'modprobe -r' or reboot cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs

ब्लैकलिस्ट लागू है, लेकिन esp4 स्निपेट लिखे जाने से पहले ही कर्नेल में लोड हो चुका था। इसे पूरी तरह से साफ़ करने के लिए लक्ष्य पर रिबूट करें या sudo modprobe -r esp4 चलाएँ।

दूसरा रन — esp4 अभी भी लोडेड

$ vcheck -fix -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF findings before fix
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR blacklisted but currently loaded; run 'modprobe -r' or reboot cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs
INF fix: nothing to do — all affected modules already blacklisted

तीसरा रन — modprobe -r esp4 के बाद

$ vcheck -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF mitigated cve=CVE-2026-31431 module=algif_aead
INF mitigated cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs

-rebuild-initramfs के साथ

$ vcheck -fix -rebuild-initramfs -host host.example.com -identity ~/.ssh/id_ed25519
...
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43284-disable.conf modules="[esp4 esp6 ipcomp4 ipcomp6 xfrm_user]"
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43500-disable.conf modules="[rxrpc kafs]"
INF rebuilding initramfs for running kernel timeout=10m0s
INF initramfs rebuilt for running kernel tool=update-initramfs
INF re-scanning after fix snippets_written=2
...

केवल चालू कर्नेल का initramfs पुनर्निर्मित होता है। अन्य स्थापित कर्नेल अपने मौजूदा initramfs को बनाए रखते हैं, इसलिए यदि नया initramfs समस्याएँ पैदा करता है तो बूट मेनू में एक पुरानी प्रविष्टि एक काम करने वाला फ़ॉलबैक बनी रहती है। ऐसे होस्ट पर जहाँ न तो update-initramfs और न ही dracut है, vcheck WRN no supported initramfs tool found ... लॉग करता है और जारी रखता है।

पहली बार होस्ट — -insecure

$ vcheck -insecure -host host.example.com -identity ~/.ssh/id_ed25519
WRN host key not in known_hosts; accepting due to -insecure host=host.example.com:22 remote=192.0.2.42:22 fingerprint=SHA256:AAAAEXAMPLEfingerPrint000000000000000000000
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
...

-insecure उन होस्ट को स्वीकार करता है जो अभी तक known_hosts में नहीं हैं। यदि कोई होस्ट पहले से दर्ज है और एक अलग कुंजी प्रस्तुत करता है, तो कनेक्शन अभी भी विफल होता है — ध्वज केवल "पहला संपर्क" ओवरराइड है, न कि किसी ज्ञात होस्ट पर मैन-इन-द-मिडल चेतावनियों को दबाने का तरीका।

पहचान विवरण

  • लोडेड: lsmod एक बार प्राप्त किया जाता है और मॉड्यूल नाम पहले कॉलम से मिलान किए जाते हैं।
  • बिल्ट-इन: /lib/modules/$(uname -r)/modules.builtin और /sys/module की जाँच की जाती है क्योंकि modprobe स्निपेट चालू कर्नेल में संकलित कोड को अक्षम नहीं कर सकते।
  • ब्लैकलिस्टेड: /etc/modprobe.d/ के अंतर्गत प्रत्येक फ़ाइल में install <module> /bin/false निर्देश के लिए खोज की जाती है (grep -rE) — वही रूप जो vcheck -fix के साथ लिखता है। अक्षम करने के अन्य रूप (जैसे blacklist) पहचाने नहीं जाते।
  • पिछली गतिविधि: पहले journalctl -k से परामर्श किया जाता है, /var/log/kern.log पर फ़ॉलबैक के साथ; प्रति मॉड्यूल अंतिम पाँच मिलान पंक्तियाँ रखी जाती हैं। इस चरण को छोड़ने के लिए -skip-logs पास करें।
  • सक्रिय सॉकेट (केवल algif_aead): ss -p --af-alg खुले AF_ALG सॉकेट्स की सूची बनाता है; हेडर के अलावा कोई भी आउटपुट सक्रिय उपयोग माना जाता है।

सभी कमांड sudo के माध्यम से चलते हैं और -command-timeout द्वारा बाध्य हैं — /var/log/kern.log पढ़ने, AF_ALG सॉकेट्स की सूची बनाने, और /etc/modprobe.d/ के अंतर्गत लिखने के लिए विशेषाधिकार प्राप्त पहुँच आवश्यक है। -unload के साथ, modprobe -r चलाने के लिए भी विशेषाधिकार प्राप्त पहुँच आवश्यक है। -rebuild-initramfs के साथ, vcheck update-initramfs -u -k $(uname -r) (Debian/Ubuntu) या dracut -f --kver $(uname -r) (RHEL/Fedora) चलाता है, जिसके लिए भी रूट की आवश्यकता होती है।

श्रेणियाँ