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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
codeql-sample-polkit — पोलकिट CVE-2021-4034 के सभी चरणों की खोज कोडक्यूएल का उपयोग करके | Kitploit
उपकरण/GitHubGitHub/hohn/codeql-sample-polkit
स्थैतिक विश्लेषणभेद्यता विश्लेषणकोड विश्लेषणपेपर और शोधलर्निंग और शिक्षा
GitHubhohn/codeql-sample-polkit

codeql-sample-polkit

पोलकिट CVE-2021-4034 के सभी चरणों की खोज कोडक्यूएल का उपयोग करके

रिपॉजिटरी देखें
2314 साल पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें

-- coding: utf-8 --

  • polkit pkexec बग

** अवलोकन यह रिपॉजिटरी CodeQL का उपयोग करके polkit pkexec बग की जांच करती है। इसमें शामिल है

  • डेटाबेस बनाने के निर्देश
  • परिणामी डेटाबेस
  • इस बग को खोजने के लिए एक दृष्टिकोण दर्शाने वाले क्वेरी का एक क्रम

ये पूर्ण हो चुके हैं:

  • polkit स्रोत / डेटाबेस निर्माण
  • कमजोर स्रोत के लिए codeql क्वेरी
  • CFG चित्रण

अभी भी किया जाना बाकी है:

  • पैच किए गए स्रोत को संभालने के लिए codeql क्वेरी संवर्द्धन
  • कमांड-लाइन निर्देश

** बग Polkit pkexec बग [[https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034][(CVE-2021-4034)]] argv के संबंध में एक ऐरे बाउंड्स त्रुटि से शुरू होता है और उसी पर आधारित है। समस्या का आउट-ऑफ-बाउंड्स हिस्सा कुछ ऐसा है जिसे हम codeql रेंज विश्लेषण लाइब्रेरी के साथ देख सकते हैं।

polkit/src/programs/pkexec.c में pkexec का main() फ़ंक्शन निम्न संरचना रखता है #+begin_src text 435 main (int argc, char *argv[]) 436 { ... 534 for (n = 1; n < (guint) argc; n++) 535 { ... 568 } ... 610 path = g_strdup (argv[n]); ... #+end_src

मुख्य विचार:

  • argc पर सरल रेंज विश्लेषण का उपयोग करें।
  • व्यंजकों के rhs / lhs को केवल उन तक सीमित रखें जिनमें argc शामिल हो।

जाँचने के लिए संस्करण:

  • 2009 से सभी Polkit संस्करण कमजोर हैं; पहला संस्करण मई 2009 में (कमिट c8c3d83, "Add a pkexec(1) command")।

  • हम /a/ डेटाबेस [[https://lgtm.com/projects/g/freedesktop/polkit/ci/#ql][lgtm से]] प्राप्त कर सकते हैं, वर्तमान <2022-02-11 शुक्र> है =...srcVersion_a6bedfd...= लेकिन यह पहले से ही polkit पैच से आगे है: #+BEGIN_SRC text commit a6bedfd09b7bba753de7a107dc471da0db801858 (origin/master, origin/HEAD, master) Author: Xi Ruoyao [email protected] Date: Thu Jan 27 10:16:32 2022 +0000

      jsauthority: port to mozjs-91
    

    commit a2bf5c9c83b6ae46cbd5c779d3055bff81ded683 Author: Jan Rybar [email protected] Date: Tue Jan 25 17:21:46 2022 +0000

      pkexec: local privilege escalation (CVE-2021-4034)
    

    #+END_SRC और हम देख सकते हैं कि समस्या ठीक हो गई है: #+BEGIN_SRC text commit a2bf5c9c83b6ae46cbd5c779d3055bff81ded683 Author: Jan Rybar [email protected] Date: Tue Jan 25 17:21:46 2022 +0000

      pkexec: local privilege escalation (CVE-2021-4034)
    

    diff --git a/src/programs/pkcheck.c b/src/programs/pkcheck.c index f1bb4e1..768525c 100644 --- a/src/programs/pkcheck.c +++ b/src/programs/pkcheck.c @@ -363,6 +363,11 @@ main (int argc, char *argv[]) local_agent_handle = NULL; ret = 126;

    • if (argc < 1)
    • {
    •  exit(126);
      
    • }
    • /* Disable remote file access from GIO. */ setenv ("GIO_USE_VFS", "local", 1); #+END_SRC
  • इसलिए हमें [[https://gitlab.freedesktop.org/polkit/polkit.git][स्रोत कोड]] चाहिए और अपने स्वयं के डेटाबेस बनाने होंगे, एक पैच-पूर्व, एक पैच-पश्चात।

अगला अनुभाग Docker कंटेनर का उपयोग करके निर्माण चरणों से गुजरता है।

** polkit और CodeQL DB बनाएं codeql डेटाबेस प्राप्त करने से पहले हमें polkit के लिए निर्माण सेटअप की आवश्यकता है।

निर्माण के लिए ऑपरेटिंग सिस्टम विकल्प:

  • macOS आज़माने लायक है, लेकिन यह जल्दी ही मुश्किल हो जाता है। निर्भरताएँ प्राप्त करने के लिए =brew= का उपयोग करना एक बिंदु तक काम करता है, लेकिन =mozjs-78= निर्भरता spidermonkey का एक विशिष्ट संस्करण है और /उसे/ बनाना व्यावहारिक नहीं है। #+BEGIN_SRC sh # autoconf... a little tricky on a mac brew install autoconf automake libtool gtk-doc export PATH="/usr/local/opt/libtool/libexec/gnubin:$PATH" ./autogen.sh

    # Use meson?
    brew install meson ninja intltool glib gobject-introspection 
    

    #+END_SRC

  • Linux polkit के लिए मूल वातावरण है, लेकिन कौन सा? mozjs-78 निर्भरता spidermonkey का एक विशिष्ट संस्करण है; साथ ही, polkit सभी वितरणों द्वारा उपयोग नहीं किया जाता है:

    • Debian PolicyKit का उपयोग करता है, polkit का नहीं।
    • Ubuntu:
      • 18.04 में भी mozjs78 नहीं है (केवल mozjs52)
      • 22.04 में mozjs78 है

Ubuntu 22.04 को कई तरीकों से चलाया जा सकता है, हार्डवेयर पर, VM (vmware, virtualbox, multipass, आदि), या किसी अन्य होस्ट पर docker कंटेनर में। इस समस्या के लिए, हम एक Docker कंटेनर का उपयोग कर सकते हैं और codeql कमांड-लाइन उपकरण भी शामिल कर सकते हैं।

कंटेनर की परिभाषा ./Dockerfiles में है, यहाँ निर्माण अनुक्रम है: #+BEGIN_SRC shell # Base image for setting up the qlbuild container docker pull ubuntu:jammy docker images docker run --cpus 4 -m 8GB -ti ubuntu:jammy

 # To-be-customized image
 docker build -t qlbuild .

#+END_SRC नोट: विंडोज़ और मैक पर docker desktop का उपयोग करते समय, मेमोरी और सीपीयू सीमाएँ वहाँ बढ़ाई जानी चाहिए। एक बार सेट हो जाने पर, कंटेनर चलाने का अनुक्रम केवल है #+BEGIN_SRC sh # Run as daemon so it stays around even when disconnecting. docker run -d -p 127.0.0.1:2020:22 --cpus 8 -m 16GB qlbuild

 # And connect
 ssh -p 2020 test@localhost

#+END_SRC

Ubuntu 22.04 पर निर्माण #+BEGIN_SRC sh # --------------------------------- # System setup/install, as root: echo "deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted" >> /etc/apt/sources.list apt-get update apt-get install -y zile build-essential git cmake
meson ninja-build
libmozjs-78-0 libmozjs-78-dev
libdbus-1-3 libdbus-1-dev apt-get build-dep -y policykit-1 apt install unzip

 # polkit version a2bf5c9c also needs some extras
 apt install duktape duktape-dev
 # older meson into /usr/local/bin
 pip3 install meson==0.60.3
 # Or get the source and use that:
 #     wget https://github.com/mesonbuild/meson/archive/refs/tags/0.60.3.tar.gz
 #     tar zxf 0.60.3.tar.gz
 #     etc.

 # ---------------------------------
 # codeql setup -- still root

 # grab -- retrieve and extract codeql cli and library
 # Usage: grab version url prefix
 grab() {
     version=$1; shift
     platform=$1; shift
     prefix=$1; shift
     mkdir -p $prefix/codeql-$version &&
         cd $prefix/codeql-$version || return

     # Get cli
     wget "https://github.com/github/codeql-cli-binaries/releases/download/$version/codeql-$platform.zip"
     # Get lib
     wget "https://github.com/github/codeql/archive/refs/tags/codeql-cli/$version.zip"
     # Fix attributes
     if [ `uname` = Darwin ] ; then
         xattr -c *.zip
     fi
     # Extract
     unzip -q codeql-$platform.zip
     unzip -q $version.zip
     # Rename library directory for VS Code
     mv codeql-codeql-cli-$version/ ql
     # Remove archives
     rm codeql-$platform.zip
     rm $version.zip
 }    

 grab v2.7.6 linux64 /opt
 grab v2.6.3 linux64 /opt

 # ---------------------------------
 # As user test:
 # Get polkit source
 cd /tmp && git clone https://gitlab.freedesktop.org/polkit/polkit.git

 # Build version 0.119
 cd /tmp/polkit
 git checkout 0.119 
 git clean -fxd

 meson setup builddir
 meson compile -C builddir

 find builddir -name pkexec -ls
 : 139269     76 -rwxr-xr-x   1 test     root        76696 Feb 12 03:06 builddir/src/programs/pkexec

 # ---------------------------------
 # Build codeql database for version 0.119 
 cd /tmp/polkit
 git checkout 0.119 
 git clean -fxd

 # Run the configuration step as usual, without codeql
 cd /tmp/polkit && rm -fR builddir
 meson setup builddir

 # Run the build step under codeql
 export CODEQL=/opt/codeql-v2.7.6/codeql/codeql
 $CODEQL --version
टूल डाउनलोड करें