Qualys ááẠááŒáá·áºááŒá°ážááŸá¯áá»á¬ážááœááºá¡áá¯á¶ážááŒá¯ááá·áº Polkit (áááẠPolicyKit) ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº á¡á¬ážáááºážáá»ááºáá áºáᯠ(CVE-2021-4034) ááᯠááœá²ááŒá¬ážáááºááŸááºáá¬ážááŒá®áž á¡ááœáá·áºáá°ážááá¶ááá±ážáá±á¬á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááᯠááŒáá·áºáá¬ážáá±á¬áááºáá±á¬ááºááœáá·áºáá»á¬ážááá¯á¡ááºááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááœáá·áºááŒá¯áá¬ážáááºá á¡á¬ážáááºážáá»ááºááẠá¡ááœáá·áºáá°ážáááá±ážáá±á¬ áá±ááá¶á¡áá¯á¶ážááŒá¯áá°áá áºáŠážá¡á¬áž áááºážááá¯á·áá¡ááœáá·áºáá°ážáá»á¬ážááᯠroot áá¯ááºáááºááŸáá·áº á áá áºáááááºážáá»á¯ááºááŸá¯á¡ááŒáá·áºá¡ááááŸáááẠááœáá·áºááŒá¯áá¬ážáááºá ááŒá¿áá¬ááᯠPwnKit áᯠáá¯ááºá¡áááºáá±ážáá¬ážááŒá®áž Linux ááŒáá·áºáá»á®ááŸá¯á¡áá»á¬ážá á¯ááœáẠáá¯á¶áá±ááœá²á·á ááºážáá¯á¶á áá áºááœáẠá¡áá¯ááºáá¯ááºááá·áº á¡áá¯ááºáá¯ááºáá±á¬ exploit ááá¯áá¯ááºáá¯ááºáááºá¡ááœáẠááŸááºáá¬ážááœááºááŒá áºáá«áááºá
SUID á¡ááŒá áºá¡áá¶ááŸáá·áºá¡áá° áá«áá¬ááá·áº PolKit á pkexec utility ááœáẠááŒá¿áá¬ááŸááá±ááŒá®áž áááºááŸááºáá¬ážáá±á¬ PolKit á ááºážáá»ááºážáá»á¬ážááŸáá·áºá¡áá® á¡ááŒá¬ážá¡áá¯á¶ážááŒá¯áá°áá¡ááœáá·áºáá°ážáá»á¬ážááŸáá·áºá¡áá° ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá pkexec áá¶áá±ážááá¯á·áá±á¬ command line arguments áá»á¬ážááᯠááŸá¬ážááœááºážá áœá¬ááá¯ááºááœááºááŒááºážááŒá±á¬áá·áºá á¡ááœáá·áºáá°ážááá¶ááá±ážáá±á¬á¡áá¯á¶ážááŒá¯áá°áá áºáŠážááẠaccess rules áá»á¬ážááá¯áááºááŸááºáá¬ážááŒááºážáááŸááá² á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒááºážááᯠáá»á±á¬áºááŒááºááŒá®áž áááºážááá¯á·ááá¯ááºááᯠroot á¡ááŒá Ạrun ááá¯ááºáá«áááºá ááá¯ááºááá¯ááºááŸá¯áá áºáá¯á¡ááœááºá PolKit ááœáẠáááºááá·áºáááºáááºáá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠáááºááŸááºáá¬ážáááºááŒá áºá á± á¡áá±ážáááŒá®ážáá«á pkexec utility ááŒáá·áº executable file á¡ááœáẠSUID root attribute ááᯠáááºááŸááºáá¬ážááŒááºážááẠáá¯á¶áá±á¬ááºáá«áááºá
áá¯ááºáááºážá ááºáá áºáá¯á áááºáá±á¬á¡áá« Pkexec ááẠcommand line argument count (argc) áááá¬ážáááºááŸá¯ááá¯á á áºáá±ážáááºááá¯ááºáá«á pkexec á developer áá»á¬ážááẠargv array ááœáẠááá entry ááœáẠprocess (pkexec) á á¡ááẠá¡ááŒá²áá«ááŸáááŒá®áž áá¯áááááŸá¬ NULL áááºááá¯áž ááá¯á·ááá¯áẠpkexec ááŸáááá·áº á áááºááá·áº command á á¡áááºááŒá áºáááºáᯠáá°ááá«áááºá á¡ááŒááºážá¡áá¯á¶á¡áá±á¡ááœááºááᯠarray áá¡ááŸááºááááºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááá¯áá á áºáá±ážáá² 1 áááºá¡ááŒá²ááá¯ááŒá®ážáááºáá¯áá°ááá±á¬ááŒá±á¬áá·áºá áá¯ááºáááºážá ááºáá áºáá¯ááẠá¡áá»ááºážááŸá®ážáá±á¬ argv á¡áááºážá¡áá»ááºážáá áºáá¯ááá¯áá»á±á¬áºááœá¬ážáá«áá Linux á execve áá¯ááºáá±á¬ááºáá»ááºááá¯ááœáá·áºááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áº pkexec ááẠNULL ááᯠáááá¡ááŒááºážá¡áá¯á¶á¡ááŒá áºáááºááŸááºááẠ( áá¯ááºáááºážá ááºá¡áááº) ááŸáá·áº áá±á¬ááºáá áºáá¯ááẠarray á áá±á¬ááºáááºááœá²á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážáá²á·ááá¯á· ááŒá¬ážáá¶ááŸááºáá¬ááºá¡ááŒááºáááºááŒá áºáááºá |âââ+ââââ+ââ+ââââ|ââââ+ââââ+ââ+ââââ| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |â-|â-+â-|â+ââ+ââ|ââ|â|â-+â-|â-+ââ+ââ|ââ| VVVVVV "áááá¯ááááº" "-option" NULL "áááºááá¯áž" "PATH=name" NULL
ááŒá¿áá¬ááŸá¬ argv array ááŒá®ážáá±á¬áẠáááºáááºážáá»áẠvariable áá»á¬ážáá«áááºáá±á¬ memory ááœáẠenvp array áá áºáá¯ááŸááááºá ááá¯á·ááŒá±á¬áá·áºá argv array ááẠááá¬ááŒá áºáá±áá«áá pkexec ááẠáááºáááºážáá»ááºááŒá±á¬ááºážááœá²ááŒá±á¬ááºážááá¯ááºáá±á¬ array ááááááŒááºá ááºá០ááŒáá·áºáá¬ážáá±á¬á¡ááœáá·áºá¡áá±ážáá»á¬ážááŒáá·áº command run ááŸáá·áºáááºáááºáá±á¬áá±áá¬ááᯠáá¯ááºáá°ááẠ(argv[1] ááẠenvp[0] ááŸáá·áº áááºáá°ááŒá áºáá¬áááº)á ááááºážáá»á¯ááºááá¯ááºááá·áºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬áž ááá¯ááºááá¯ááºáá°á¡á¬ážááŒáá·áºá
argv[1] ááááºááá¯ážááᯠáááºáá¶áááŸáááŒá®ážáá±á¬ááºá pkexec ááẠPATH ááŸá ááá¯ááºáááºážááŒá±á¬ááºážáá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážáᬠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá±á¬ááá¯ááºááá¯á· áááºážááŒá±á¬ááºážá¡ááŒáá·áºá¡á á¯á¶ááᯠáá¯á¶ážááŒááºáááºááŸáá·áº argv[1] ááá¯á· ááŒááºááœá¬ážááẠáááºážááŒá±á¬ááºážá¡ááŒáá·áºá¡á á¯á¶ááŒáá·áº á á¬ááŒá±á¬ááºážáá áºáá¯á¡á¬áž ááœáŸááºááŒáá»ááºáá áºáá¯áá±ážáá±ážáááºá argv[1] ááẠenvp[0] ááŸáá·áº áá°áá®áá±á¬ááŒá±á¬áá·áº ááááááºáááºážáá»áẠvariable ááááºááá¯ážááᯠoverwrite áá¯ááºá á±áááºá ááááááºáááºážáá»áẠááááºážááŸááºá á¡áááºááᯠááŒááºááŸááºááŒááºážááŒáá·áºá ááá¯ááºááá¯ááºáá°ááẠpkexec ááœáẠá¡ááŒá¬ážáááºáááºážáá»áẠááááºážááŸááºááᯠá¡á á¬ážááá¯ážááá¯ááºáááºá á¥ááá¬á suid áááá¯ááááºáá»á¬ážááœáẠááœáá·áºáááŒá¯áá±á¬ âLD_PRELOADâ áááºáááºážáá»áẠááááºážááŸááºááᯠá¡á á¬ážááá¯ážáᬠáááºážááá¯á·á áá»áŸáá±áá¬ážáá±á¬ áá áºáá»á áºááá¯ááºááá¯á· áááºááẠá á®á ááºáá±ážáááºá áá¯ááºáááºážá ááºá
á¡áá¯ááºáá¯ááºáá±á¬ exploit ááœáẠiconv_open() ááá¯áá¯á¶ážááá·áº áá¯ááºááá¯áá±á«áºáá±á¬á¡áá«ááœáẠáááºá¹áá±ááá°ážááŒá±á¬ááºážááá·áºá á¬ááŒáá·áºááá¯ááºááá¯á· áááºážááŒá±á¬ááºážááá¯áá¯á¶ážááŒááºáááºá¡áá¯á¶ážááŒá¯ááá·áº GCONV_PATH variable ááᯠá¡á á¬ážááá¯ážááŒááºážááœáẠáá«áááºáá«áááºá GCONV_PATH á¡ááœááºážááŸá áááºážááŒá±á¬ááºážááᯠááŒááºáááºáááºááŸááºááŒááºážááŒáá·áºá ááá¯ááºááá¯ááºáá°ááẠáááºážááẠáááºáá¬ážááá·áº á á¶á¡áá¯ááºááœááºv áá áºáá»á áºááá¯ááºááá¯ááºááŒá±á¬ááºáž á¡á¬ááá¶ááá¯ááºáá±á¬áºáááºáž pkexec ááŒáá·áº áá¯ááºáá±á¬ááºáá±áá±ážááá·áº á¡ááá·áºááœáẠerror áááºáá±á·áá»áºáá áºáᯠááŒáááá·áºá¡áá« áááºážá០áá¯ááºáá±á¬ááºááá·áº áááºážáááá¯ááºááá¯ááºá á¬ááŒáá·áºááá¯ááºá root áá¯ááºááá¯ááºááœáá·áºáá»á¬ážááŸáá·áº launch permissions áá»á¬ážááᯠá á áºáá±ážááŒááºážáááŒá¯áá®á
ááŒá¿áá¬ááẠááŸááºáá¬ááºááá¯ááœááºážááŸá¯ááŒá±á¬áá·áº ááŒá áºáááá·áºá¡áá»ááºááᯠáááááŒá¯áááá±á¬áºáááºáž áááºážááᯠáá¬á·ááºáá²áááá¯áá¬ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºá á± áá¯á¶ááŒááºá áááºáá»áááŒá®áž áááºáá«ááá²áá² á¡áá¯á¶ážáá»ááá¯ááºááŒá±á¬ááºáž ááŸááºáá¬ážáá¬ážáááºá ááŒááºáááºáá¬ážáá±á¬ exploit ááᯠUbuntuá Debianá Fedora ááŸáá·áº CentOS ááœáẠá¡á±á¬ááºááŒááºá áœá¬ á ááºážáááºáá²á·ááŒá®ážááŒá áºáá±á¬áºáááºáž á¡ááŒá¬ážááŒáá·áºáá±ááŸá¯áá»á¬ážááœááºáááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá áá°áááºáž exploit ááᯠáá°ááááŸááºááŒá¬áž ááááŸáááá¯ááºáá±ážáá«á áááºážááẠá¡áá±ážá¡ááœá²ááŒá áºááŒá®áž á¡ááŒá¬ážáá¯áá±áá®áá»á¬ážá á¡ááœááºááá° ááŒááºáááºáááºáá®ážááá¯ááºááŒá±á¬ááºáž ááœáŸááºááŒáá±á¬ááŒá±á¬áá·áº patch update ááᯠá¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážá á áá áºáá»á¬ážááœáẠá¡ááŒááºáá¯á¶áž ááá·áºááœááºážááẠá¡áá±ážááŒá®ážáá«áááºá Polkit ááẠBSD á áá áºáá»á¬ážááŸáá·áº Solaris ááá¯á·á¡ááœááºáááºáž áááá¯ááºáá±á¬áºáááºáž áááºážááá¯á·á¡ááœáẠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠááá±á·áá¬ááá±ážáá«á áááá¬ážááá·áºá¡áá¬ááŸá¬ OpenBSD ááœáẠááá¯ááºááá¯ááºááŸá¯ááᯠááá¯ááºáá±á¬ááºááá¯ááºááŒááºážááŒá±á¬áá·áºá OpenBSD kernel ááẠexecve() ááá¯áá±á«áºáá±á¬á¡áá« null argc áááºááá¯ážááᯠááŒááºáááºážááœáá·áºáááŒá¯áá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
pkexec á¡áááá·áºááᯠáá±á«ááºážááá·áºááá¯ááºááááºážá ááŒá¿áá¬ááẠáááá áá¯ááŸá Ạáá±áááááºážá ááŸááá±áá²á·áááºá PolKit á¡á¬ážáááºážáá»ááºá¡ááœáẠááŒááºáááºááŒááºážááᯠáááºááŸáááœáẠpatch áá áºáá¯á¡áá±ááŒáá·áº áááá¯ááºááẠ( patch áá¯ááºáá±ááŒááºážáááŸááá±ážáá« )á ááá¯á·áá±á¬áº ááŒáá·áºááŒá°ážáá±ážáá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážá ááŒá¿áá¬ááᯠááŒáá¯áááºá¡ááŒá±á¬ááºážááŒá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áºá ááŒáá·áºáá±áá°á¡áá»á¬ážá á¯ááẠá¡á¬ážáááºážáá»ááºááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá±á¬áºááŒááºážááŒáá·áº á¡ááºááááºááᯠáá áºááŒáá¯ááºáááºáááºáž áá¯ááºááŒááºáá²á·áááºá ááŒá¿áá¬ááᯠRHEL 2009/6/7á Debianá Ubuntuá openSUSEá SUSEá Fedoraá ALT Linuxá ROSAá Gentooá Void Linuxá Arch Linux ááŸáá·áº Manjaro ááœáẠááŒá±ááŸááºážáá¬ážáá«áááºá á¡á¬ážáááºážáá»ááºááᯠááááºááá¯á·ááẠáá¬áá®ááá¯ááºážáá¬ááŸá¯á¡áá±ááŒáá·áº SUID á¡ááŒá áºá¡áá¶ááᯠ/usr/bin/pkexec áááá¯áááẠ(âchmod 8 /usr/bin/pkexecâ) á០áááºááŸá¬ážááá¯ááºáááºá
source: opennet.ru