{"uuid": "936058b4-fd6b-4ad3-9cb5-96de66c9ebf6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "2a075640-a300-48a4-bb44-bc6130783b9b", "vulnerability": "CVE-2021-4034", "type": "published-proof-of-concept", "source": "https://t.me/linuxtnt/3778", "content": "\u0645\u0642\u062f\u0627\u0631 \u0635\u0641\u0631 \u0628\u0631\u0627\u06cc argc \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0644\u06cc\u0646\u0648\u06a9\u0633\u06cc. \u0686\u0631\u0627 \u0648 \u0686\u06af\u0648\u0646\u0647\u061f\n\n\u0647\u0645\u0647 \u0686\u06cc\u0632 \u0627\u0632 \u0628\u0631\u0631\u0633\u06cc  CVE-2021-4034 \u0648 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u062c\u062f\u062f PolKit \u0628\u0631 \u0631\u0648\u06cc Ubuntu 22.04 \u0634\u0631\u0648\u0639 \u0634\u062f! \u062a\u0635\u0645\u06cc\u0645 \u062f\u0627\u0634\u062a\u0645 \u06cc\u06a9 \u0646\u0633\u062e\u0647\u200c\u06cc \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631 PolKit \u0631\u0648 \u0628\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 Debug Symbols \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0631\u062f\u0647 \u0648 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0627\u0645\u0644 \u0627\u06cc\u0646 CVE \u0631\u0648 \u062f\u0631 GDB \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0645. \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0644\u0627\u0635\u0647 \u0628\u06af\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc \u062f\u0631 \u0628\u0627\u06cc\u0646\u0631\u06cc pkexec \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u0648 \u0628\u0647 \u06a9\u0645\u06a9 \u0622\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 LPE \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u0634\u0631\u0627\u06cc\u0637 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc pkexec \u0634\u0631\u0637 argc==0 \u0628\u0631\u0642\u0631\u0627\u0631 \u0628\u0627\u0634\u062f \u06a9\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0622\u0646 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u0644\u06cc \u062e\u0648\u0627\u0646\u062f\u0647 \u0634\u062f\u0647 \u0648 \u0628\u062a\u0648\u0627\u0646 \u06cc\u06a9 library \u0645\u062e\u0631\u0628 \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0645\u0648\u062f.\n\n\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 pkexec \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0628\u0631 \u0631\u0648\u06cc Solaris, BSD \u0647\u0645 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u062f\u0631 \u0645\u0642\u0627\u0644\u0647\u200c\u06cc \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 CVE \u06a9\u0647 \u062a\u0648\u0633\u0637 Qualys Security \u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a \u0645\u062a\u0646 \u0632\u06cc\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u0627\u0632 \u0627\u0644\u0632\u0627\u0645 argc==0 \u0628\u0631\u0627\u06cc \u0627\u0645\u06a9\u0627\u0646\u200c\u067e\u0630\u06cc\u0631 \u0628\u0648\u062f\u0646 \u0627\u06cc\u0646 LPE \u062e\u0628\u0631 \u0645\u06cc\u200c\u062f\u0647\u062f.\nOpenBSD is not exploitable, because its kernel refuses to execve() a program if argc is 0\n\n\u067e\u0633 \u0641\u0631\u0636 \u0645\u0646 \u0627\u06cc\u0646 \u0628\u0648\u062f \u06a9\u0647 \u062f\u0631 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0627\u062e\u06cc\u0631 \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0647\u0645 \u0628\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 PolKit \u0628\u0627\u06cc\u062f \u0628\u062a\u0648\u0627\u0646 \u0627\u06cc\u0646 \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u062a\u0633\u062a \u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0628\u0648\u062f \u06a9\u0647 \u0628\u0631 \u0631\u0648\u06cc Ubuntu 22.04 \u06cc\u06a9 \u0646\u0633\u062e\u0647\u200c\u06cc \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631 \u0631\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0631\u062f\u0647 \u0648 \u06cc\u06a9 \u06a9\u062f \u0633\u0627\u062f\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0646\u0648\u0634\u062a\u0645 \u06a9\u0647 pkexec \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 argc==0 \u0628\u0631\u0642\u0631\u0627\u0631 \u0628\u0627\u0634\u062f.\n\nvoid main() {\n    char *args[] = { NULL };\n    char *envs[] = {\"SHELL=/bin/bash\", 0};\n    execve(\"pkexec\", args, envs);\n}\n\n\u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u0632\u062f\u0646 strace \u0645\u0634\u0627\u0647\u062f\u0647 \u0634\u062f \u06a9\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u062f\u0631 \u0633\u0637\u062d user \u0637\u0628\u0642 \u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f.\nexecve(\"pkexec\", [], 0x7ffe3883b200 /* 1 var */)\n\n\u0648\u0644\u06cc \u062f\u0648 \u062a\u0627 \u0645\u0648\u0631\u062f \u0639\u062c\u06cc\u0628 \u0631\u062e \u062f\u0627\u062f. \u0627\u0648\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 gdb \u0628\u0631 \u062e\u0644\u0627\u0641 \u0627\u0646\u062a\u0638\u0627\u0631 \u0628\u0627 argc==1\u200c \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0648 argv[0] \u06a9\u0647 \u0627\u0633\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0622\u0646 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f \u0648 \u0637\u0628\u0642 \u0645\u062f\u0644 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0628\u0627\u06cc\u062f NULL \u0645\u06cc\u200c\u0628\u0648\u062f \u0628\u0631\u0627\u0628\u0631 \u201c\u201d \u0634\u062f\u0647 \u0628\u0648\u062f. \u0645\u0648\u0631\u062f \u062f\u0648\u0645\u06cc \u06a9\u0647 \u0639\u062c\u06cc\u0628 \u0628\u0648\u062f \u067e\u06cc\u0627\u0645 \u0632\u06cc\u0631 \u062f\u0631 dmesg \u0628\u0648\u062f.\nprocess 'exploit' launched 'pkexec' with NULL argv: empty string added\n\n\u0628\u0627 \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0633\u0631\u0627\u063a Ubuntu 20.04 \u0631\u0641\u062a\u0645 \u0648 \u0647\u0645\u06cc\u0646 \u06a9\u062f \u0631\u0627 \u0628\u0631 \u0631\u0648\u06cc \u0622\u0646 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0637\u0628\u0642 \u0627\u0646\u062a\u0638\u0627\u0631 \u0631\u062e \u062f\u0627\u062f\u0647 \u0648 \u062f\u0631 gdb \u0628\u0627 \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 main \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u06cc pkexec \u0645\u0642\u062f\u0627\u0631 argc==0 \u0628\u0631\u0642\u0631\u0627\u0631 \u0628\u0648\u062f\u0647 \u0648 \u0627\u0645\u06a9\u0627\u0646 \u062a\u0633\u062a CVE \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a. \u0627\u06cc\u0646\u062c\u0627 \u0648\u0627\u0636\u062d \u0628\u0648\u062f \u06a9\u0647 \u062f\u0631 \u06a9\u0631\u0646\u0644\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0644\u06cc\u0646\u0648\u06a9\u0633 \u062f\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0633\u06cc\u0633\u062a\u0645\u06cc execve \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u06cc \u0627\u0639\u0645\u0627\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062c\u0644\u0648\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0627 argc==0 \u06af\u0631\u0641\u062a\u0647 \u0634\u0648\u062f. \u0627\u06cc\u0646\u062c\u0627 \u062f\u06cc\u06af\u0647 \u0644\u0627\u0632\u0645 \u0628\u0648\u062f \u06a9\u062f \u06a9\u0631\u0646\u0644 \u0686\u06a9 \u0634\u0648\u062f!\n\n\u0628\u0627 \u0631\u0641\u062a\u0646 \u0628\u0647 github\u200c \u0648 \u0628\u0631\u0631\u0633\u06cc \u0641\u0627\u06cc\u0644 fs/exec.c \u06a9\u0631\u0646\u0644 \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0645\u0634\u0627\u0647\u062f\u0647 \u0634\u062f \u06a9\u0647 \u062f\u0631 \u062a\u0627\u0628\u0639 \u0627\u062c\u0631\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0633\u06cc\u0633\u062a\u0645\u06cc execve \u06a9\u062f \u0632\u06cc\u0631 \u062f\u0631 March 2022 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u06a9\u0647 \u062c\u0644\u0648\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u0628\u0627 argc==0 \u0631\u0627 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f.\n\n/*\n * When argv is empty, add an empty string (\"\") as argv[0] to\n * ensure confused userspace programs that start processing\n* from argv[1] won't end up walking envp. See also\n* bprm_stack_limits().\n*/\nif (bprm-&gt;argc == 0) {\n retval = copy_string_kernel(\"\", bprm);\n if (retval &lt; 0)\n  goto out_free;\n bprm-&gt;argc = 1;\n}\n\n\u067e\u0633 \u0627\u0632 \u0627\u06cc\u0646 \u0628\u0647 \u0628\u0639\u062f \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 OpenBSD \u0628\u0631 \u0631\u0648\u06cc \u0644\u06cc\u0646\u0648\u06a9\u0633 \u0646\u06cc\u0632 \u0627\u0645\u06a9\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc\u200c\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0645\u062f\u0644\u06cc \u0648\u062c\u0648\u062f \u0646\u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a! :-D\n\u067e.\u0646: \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647\u200c \u06cc\u06a9 \u0648\u06cc\u062f\u0626\u0648 \u0627\u0632 \u0634\u06cc\u0648\u0647\u200c\u06cc \u06a9\u0627\u0645\u0644 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 CVE \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc\u200c\u06a9\u0646\u0645.\n\n#linux #kernel #CVE #PolKit #pkexec #execve", "creation_timestamp": "2024-05-17T16:26:16.000000Z"}