FlawOpen

flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail

● CVE-2026-31431 · CVSS 7.8 · उच्च
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-31431: Linux कर्नेल की Copy Fail खामी

Copy Fail, Linux AF_ALG के AEAD पथ में स्थानीय विशेषाधिकार-वृद्धि की खामी है। in-place अनुकूलन ने स्रोत और लक्ष्य मैपिंग को गड़बड़ा दिया; upstream सुधार out-of-place प्रसंस्करण बहाल करता है और CISA ने CVE को KEV में जोड़ा है।[1], [2], [5]

💡 आसान भाषा में (ELI5)

पुस्तकालयाध्यक्ष को फोटोकॉपी पर निशान लगाना है, लेकिन मशीन का शॉर्टकट पेंसिल को मूल किताब तक पहुँचा देता है। in-place शॉर्टकट से परिणाम के लिए लेखन दूसरी मैपिंग वाले पेज तक पहुँच सकता था। सुधार स्रोत और लक्ष्य को अलग संसाधित करता है।[3], [8]

इस पेज के मुख्य शब्द

AF_ALG
उपयोगकर्ता प्रक्रियाओं से क्रिप्टोग्राफ़िक संचालन माँगने वाला Linux सॉकेट इंटरफ़ेस।[8], [3]
AEAD
Associated Data के साथ प्रमाणित एन्क्रिप्शन: डेटा एन्क्रिप्ट और अतिरिक्त अनएन्क्रिप्टेड मेटाडेटा प्रमाणित करता है।[8]
algif_aead
AEAD के लिए AF_ALG कार्यान्वयन, जिसमें स्रोत/लक्ष्य संभालने का कमजोर पथ शामिल है।[3]
Page cache
फ़ाइल सामग्री का कर्नेल मेमोरी कैश; मैप किए गए पेज का लेखन डिस्क अपडेट से पहले रीड को प्रभावित कर सकता है।[8]
CWE-1288 / CWE-669
NVD में CWE-1288 का मैपिंग स्रोत redhat-SADP दिया गया है; Red Hat का पृष्ठ भी यही CWE सूचीबद्ध करता है। कनाडा के साइबर सुरक्षा केंद्र की चेतावनी इस समस्या को CWE-669 में वर्गीकृत करती है। ये अलग-अलग स्रोतों के वर्गीकरण हैं, परस्पर बदलने योग्य लेबल नहीं।[11], [7], [5], [9], [10]

फ्रेमवर्क मैपिंग

मूल कारण विश्लेषण (Root Cause)

2017 के बदलाव 72548b093ee3 ने algif_aead में in-place अनुकूलन जोड़ा। स्रोत और लक्ष्य अलग मैपिंग से आ सकते हैं। authencesn अस्थायी डेटा को अपेक्षित आउटपुट क्षेत्र से बाहर लिख सकता है; in-place scatterlist से लेखन splice() द्वारा दिए गए फ़ाइल page cache तक पहुँच सकता था। Linux CVE सूचना सुधार को associated data की कॉपी बनाए रखते हुए out-of-place प्रसंस्करण पर लौटना बताती है। स्थानीय पहुँच और कमजोर पथ सक्षम होना आवश्यक है। CVSS 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H); यह अनधिकृत रिमोट प्रवेश नहीं है।[1], [3], [8], [7], [9], [10]

हमले का चरण-दर-चरण प्रवाह

चरण 1

स्थानीय प्रक्रिया API तक पहुँचती है

स्थानीय प्रक्रिया AF_ALG से AEAD माँगती है और algif_aead उसे संभालता है। केवल रिमोट अनुरोध इस स्थानीय इंटरफ़ेस तक नहीं पहुँचता।[8], [7]

चरण 2

डेटा पथ in-place अनुकूलन अपनाता है

कमजोर कार्यान्वयन स्रोत और लक्ष्य को साझा पेज मानता है, जबकि उनकी मैपिंग अलग होती है।[8], [3]

चरण 3

लेखन आउटपुट सीमा से बाहर जाता है

authencesn का अस्थायी डेटा आउटपुट से बाहर लिख सकता है और splice() से दिए गए फ़ाइल कैश पेज तक पहुँच सकता है।[8]

चरण 4

कर्नेल मैपिंग अलग करता है

सुधार in-place जटिलता हटाता, associated data कॉपी करता और out-of-place प्रसंस्करण बहाल करता है।[1], [3]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

यह वैचारिक सारांश है, कर्नेल का हूबहू कोड या संकलित पैच नहीं। upstream सूचना कहती है कि सुधार 72548b093ee3 को अधिकांशतः वापस करता है, पर अलग मैपिंग के कारण associated data कॉपी रखता है।[3], [2]

सोर्स अंश: crypto/algif_aead.c (_aead_recvmsg)

कमज़ोर कार्यान्वयन
/* सुधार से पहले: crypto operation को उसी जगह पर व्यवस्थित करें। */
rsgl_src = areq->first_rsgl.sgl.sg;

if (ctx->enc) {
    memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);
    af_alg_pull_tsgl(sk, processed, NULL, 0);
} else {
    memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);
    /* Authentication tag के लिए TX scatterlist बनाएँ और chain करें। */
    areq->tsgl_entries = af_alg_count_tsgl(sk, processed, processed - as);
    /* ... */
}

aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
                       areq->first_rsgl.sgl.sg, used, ctx->iv);
सुरक्षित और सुदृढ़ फ़िक्स
/* सुधार के बाद: हर request के लिए source scatterlist बनाए रखें। */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* areq->tsgl allocate और initialize करें, फिर TX pages उसमें जोड़ें। */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;

/* Associated data कॉपी करें, लेकिन source और destination अलग रखें। */
rsgl_src = areq->first_rsgl.sgl.sg;
memcpy_sglist(rsgl_src, tsgl_src, ctx->aead_assoclen);
aead_request_set_crypt(&areq->cra_u.aead_req, tsgl_src,
                       areq->first_rsgl.sgl.sg, used, ctx->iv);

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत