ಹೆಚ್ಚಿನ ಲಿನಕ್ಸ್ ವಿತರಣೆಗಳಲ್ಲಿ ರೂಟ್ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುವ PolKit ನಲ್ಲಿ ನಿರ್ಣಾಯಕ ದುರ್ಬಲತೆ

ಕ್ವಾಲಿಸ್ ಪೋಲ್ಕಿಟ್ (ಹಿಂದೆ ಪಾಲಿಸಿಕಿಟ್) ಸಿಸ್ಟಂ ಘಟಕದಲ್ಲಿ ದುರ್ಬಲತೆಯನ್ನು (CVE-2021-4034) ಗುರುತಿಸಿದೆ, ಇದು ಸವಲತ್ತುಗಳಿಲ್ಲದ ಬಳಕೆದಾರರಿಗೆ ಉನ್ನತ ಪ್ರವೇಶ ಹಕ್ಕುಗಳ ಅಗತ್ಯವಿರುವ ಕ್ರಿಯೆಗಳನ್ನು ಮಾಡಲು ಅವಕಾಶ ನೀಡುತ್ತದೆ. ದುರ್ಬಲತೆಯು ಸವಲತ್ತು ಇಲ್ಲದ ಸ್ಥಳೀಯ ಬಳಕೆದಾರರಿಗೆ ತಮ್ಮ ಸವಲತ್ತುಗಳನ್ನು ರೂಟ್ ಮಾಡಲು ಮತ್ತು ಸಿಸ್ಟಮ್‌ನ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಪಡೆಯಲು ಅನುಮತಿಸುತ್ತದೆ. ಸಮಸ್ಯೆಗೆ PwnKit ಎಂದು ಸಂಕೇತನಾಮ ನೀಡಲಾಗಿದೆ ಮತ್ತು ಹೆಚ್ಚಿನ ಲಿನಕ್ಸ್ ವಿತರಣೆಗಳಲ್ಲಿ ಡೀಫಾಲ್ಟ್ ಕಾನ್ಫಿಗರೇಶನ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಉತ್ಪಾದಿಸಲು ಇದು ಗಮನಾರ್ಹವಾಗಿದೆ.

ಸಮಸ್ಯೆಯು PolKit ನ pkexec ಯುಟಿಲಿಟಿಯಲ್ಲಿದೆ, ಇದು SUID ರೂಟ್ ಫ್ಲ್ಯಾಗ್‌ನೊಂದಿಗೆ ಬರುತ್ತದೆ ಮತ್ತು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ PolKit ನಿಯಮಗಳ ಪ್ರಕಾರ ಇನ್ನೊಬ್ಬ ಬಳಕೆದಾರರ ಸವಲತ್ತುಗಳೊಂದಿಗೆ ಆಜ್ಞೆಗಳನ್ನು ಚಲಾಯಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. pkexec ಗೆ ರವಾನೆಯಾದ ಕಮಾಂಡ್ ಲೈನ್ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳ ತಪ್ಪಾದ ನಿರ್ವಹಣೆಯಿಂದಾಗಿ, ಸವಲತ್ತುಗಳಿಲ್ಲದ ಬಳಕೆದಾರರು ದೃಢೀಕರಣವನ್ನು ಬೈಪಾಸ್ ಮಾಡಬಹುದು ಮತ್ತು ಪ್ರವೇಶ ನಿಯಮಗಳ ಸೆಟ್ ಅನ್ನು ಲೆಕ್ಕಿಸದೆ ತಮ್ಮ ಕೋಡ್ ಅನ್ನು ರೂಟ್ ಆಗಿ ಚಲಾಯಿಸಬಹುದು. ದಾಳಿಗಾಗಿ, PolKit ನಲ್ಲಿ ಯಾವ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ನಿರ್ಬಂಧಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ ಎಂಬುದು ಮುಖ್ಯವಲ್ಲ, Pkexec ಯುಟಿಲಿಟಿಯೊಂದಿಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್‌ಗಾಗಿ SUID ರೂಟ್ ಗುಣಲಕ್ಷಣವನ್ನು ಹೊಂದಿಸಿದರೆ ಸಾಕು.

Pkexec ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವಾಗ ರವಾನಿಸಲಾದ ಕಮಾಂಡ್ ಲೈನ್ ಆರ್ಗ್ಯುಮೆಂಟ್ ಕೌಂಟ್ (argc) ಸಿಂಧುತ್ವವನ್ನು ಪರಿಶೀಲಿಸುವುದಿಲ್ಲ. argv ರಚನೆಯಲ್ಲಿನ ಮೊದಲ ನಮೂದು ಯಾವಾಗಲೂ ಪ್ರಕ್ರಿಯೆಯ ಹೆಸರನ್ನು ಹೊಂದಿರುತ್ತದೆ (pkexec), ಮತ್ತು ಎರಡನೆಯದು NULL ಮೌಲ್ಯ ಅಥವಾ pkexec ಮೂಲಕ ಪ್ರಾರಂಭಿಸಲಾದ ಆಜ್ಞೆಯ ಹೆಸರನ್ನು ಹೊಂದಿರುತ್ತದೆ ಎಂದು pkexec ನ ಅಭಿವರ್ಧಕರು ಊಹಿಸಿದ್ದಾರೆ. ರಚನೆಯ ನೈಜ ವಿಷಯಗಳ ವಿರುದ್ಧ ಆರ್ಗ್ಯುಮೆಂಟ್ ಎಣಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗಿಲ್ಲ ಮತ್ತು ಯಾವಾಗಲೂ 1 ಕ್ಕಿಂತ ಹೆಚ್ಚಾಗಿರುತ್ತದೆ ಎಂದು ಭಾವಿಸಲಾಗಿದೆ, ಒಂದು ಪ್ರಕ್ರಿಯೆಯು ಖಾಲಿ argv ಅರೇ ಅನ್ನು ರವಾನಿಸಿದರೆ, Linux execve ಕಾರ್ಯವು ಅನುಮತಿಸಿದಂತೆ, pkexec NULL ಅನ್ನು ಮೊದಲ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ಪರಿಗಣಿಸುತ್ತದೆ ( ಪ್ರಕ್ರಿಯೆಯ ಹೆಸರು) ಮತ್ತು ಮುಂದಿನದು ಬಫರ್ ಮೆಮೊರಿಯ ಹೊರಗೆ, ರಚನೆಯ ನಂತರದ ವಿಷಯಗಳಂತೆ. |———+———+——+———|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "ಪ್ರೋಗ್ರಾಂ" "-ಆಯ್ಕೆ" ಶೂನ್ಯ "ಮೌಲ್ಯ" "PATH=ಹೆಸರು" ಶೂನ್ಯ

ಸಮಸ್ಯೆಯೆಂದರೆ argv ರಚನೆಯ ನಂತರ ಪರಿಸರದ ಅಸ್ಥಿರಗಳನ್ನು ಹೊಂದಿರುವ ಮೆಮೊರಿಯಲ್ಲಿ envp ರಚನೆಯಿದೆ. ಹೀಗಾಗಿ, argv ರಚನೆಯು ಖಾಲಿಯಾಗಿದ್ದರೆ, ಪರಿಸರ ವೇರಿಯಬಲ್‌ಗಳೊಂದಿಗಿನ ರಚನೆಯ ಮೊದಲ ಅಂಶದಿಂದ ಉನ್ನತ ಸವಲತ್ತುಗಳೊಂದಿಗೆ ಕಮಾಂಡ್ ರನ್‌ನ ಕುರಿತು pkexec ದತ್ತಾಂಶವನ್ನು ಹೊರತೆಗೆಯುತ್ತದೆ (argv[1] envp[0] ಗೆ ಹೋಲುತ್ತದೆ), ಅದರ ವಿಷಯಗಳನ್ನು ನಿಯಂತ್ರಿಸಬಹುದು ಆಕ್ರಮಣಕಾರರಿಂದ.

argv[1] ನ ಮೌಲ್ಯವನ್ನು ಸ್ವೀಕರಿಸಿದ ನಂತರ, pkexec PATH ನಲ್ಲಿನ ಫೈಲ್ ಪಥಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡು, ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್‌ಗೆ ಪೂರ್ಣ ಮಾರ್ಗವನ್ನು ನಿರ್ಧರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ ಮತ್ತು argv ಗೆ ಪೂರ್ಣ ಮಾರ್ಗದೊಂದಿಗೆ ಸ್ಟ್ರಿಂಗ್‌ಗೆ ಪಾಯಿಂಟರ್ ಅನ್ನು ಬರೆಯುತ್ತದೆ[1], ಇದು argv[1] envp[0]ಗೆ ಒಂದೇ ಆಗಿರುವುದರಿಂದ ಮೊದಲ ಪರಿಸರ ವೇರಿಯಬಲ್‌ನ ಮೌಲ್ಯವನ್ನು ತಿದ್ದಿ ಬರೆಯಲು ಕಾರಣವಾಗುತ್ತದೆ. ಮೊದಲ ಪರಿಸರ ವೇರಿಯಬಲ್‌ನ ಹೆಸರನ್ನು ಕುಶಲತೆಯಿಂದ, ಆಕ್ರಮಣಕಾರರು pkexec ನಲ್ಲಿ ಮತ್ತೊಂದು ಪರಿಸರ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬದಲಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ, "LD_PRELOAD" ಪರಿಸರ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬದಲಿಸಿ, ಇದನ್ನು suid ಪ್ರೋಗ್ರಾಂಗಳಲ್ಲಿ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ಅವರ ಹಂಚಿಕೆಯ ಲೈಬ್ರರಿಯನ್ನು ಲೋಡ್ ಮಾಡಲು ವ್ಯವಸ್ಥೆಗೊಳಿಸಬಹುದು. ಪ್ರಕ್ರಿಯೆ.

ವರ್ಕಿಂಗ್ ಶೋಷಣೆಯು GCONV_PATH ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬದಲಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಇದು ಸಂಕೇತ ಟ್ರಾನ್ಸ್‌ಕೋಡಿಂಗ್ ಲೈಬ್ರರಿಗೆ ಮಾರ್ಗವನ್ನು ನಿರ್ಧರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ, g_printerr() ಕಾರ್ಯವನ್ನು ಕರೆಯುವಾಗ ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಲೋಡ್ ಆಗುತ್ತದೆ, ಅದರ ಕೋಡ್ iconv_open() ಅನ್ನು ಬಳಸುತ್ತದೆ. GCONV_PATH ನಲ್ಲಿ ಮಾರ್ಗವನ್ನು ಮರುವ್ಯಾಖ್ಯಾನಿಸುವ ಮೂಲಕ, ಆಕ್ರಮಣಕಾರರು ಲೋಡ್ ಮಾಡಲಾದ ಪ್ರಮಾಣಿತ iconv ಲೈಬ್ರರಿಯಲ್ಲ, ಆದರೆ ತನ್ನದೇ ಆದ ಲೈಬ್ರರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು, pkexec ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿರುವ ಹಂತದಲ್ಲಿ ದೋಷ ಸಂದೇಶವನ್ನು ಪ್ರದರ್ಶಿಸಿದಾಗ ಹ್ಯಾಂಡ್ಲರ್‌ಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಮೂಲ ಹಕ್ಕುಗಳು ಮತ್ತು ಪ್ರಾರಂಭದ ಅನುಮತಿಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ.

ಮೆಮೊರಿ ಭ್ರಷ್ಟಾಚಾರದಿಂದ ಸಮಸ್ಯೆ ಉಂಟಾಗುತ್ತದೆ ಎಂಬ ಅಂಶದ ಹೊರತಾಗಿಯೂ, ಹಾರ್ಡ್‌ವೇರ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅನ್ನು ಲೆಕ್ಕಿಸದೆ ಅದನ್ನು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ಮತ್ತು ಪುನರಾವರ್ತಿತವಾಗಿ ಬಳಸಿಕೊಳ್ಳಬಹುದು ಎಂದು ಗಮನಿಸಲಾಗಿದೆ. ಸಿದ್ಧಪಡಿಸಿದ ಶೋಷಣೆಯನ್ನು ಉಬುಂಟು, ಡೆಬಿಯನ್, ಫೆಡೋರಾ ಮತ್ತು ಸೆಂಟೋಸ್‌ನಲ್ಲಿ ಯಶಸ್ವಿಯಾಗಿ ಪರೀಕ್ಷಿಸಲಾಗಿದೆ, ಆದರೆ ಇತರ ವಿತರಣೆಗಳಲ್ಲಿಯೂ ಬಳಸಬಹುದು. ಮೂಲ ಶೋಷಣೆಯು ಇನ್ನೂ ಸಾರ್ವಜನಿಕವಾಗಿ ಲಭ್ಯವಿಲ್ಲ, ಇದು ಕ್ಷುಲ್ಲಕವಾಗಿದೆ ಮತ್ತು ಇತರ ಸಂಶೋಧಕರು ಸುಲಭವಾಗಿ ಮರುಸೃಷ್ಟಿಸಬಹುದು ಎಂದು ಸೂಚಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಬಹು-ಬಳಕೆದಾರ ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ ಸಾಧ್ಯವಾದಷ್ಟು ಬೇಗ ಪ್ಯಾಚ್ ನವೀಕರಣವನ್ನು ಸ್ಥಾಪಿಸುವುದು ಮುಖ್ಯವಾಗಿದೆ. ಪೋಲ್ಕಿಟ್ ಬಿಎಸ್‌ಡಿ ಸಿಸ್ಟಮ್‌ಗಳು ಮತ್ತು ಸೋಲಾರಿಸ್‌ಗೆ ಸಹ ಲಭ್ಯವಿದೆ, ಆದರೆ ಅವುಗಳ ಬಳಕೆಗಾಗಿ ಅಧ್ಯಯನ ಮಾಡಲಾಗಿಲ್ಲ. ಓಪನ್‌ಬಿಎಸ್‌ಡಿಯಲ್ಲಿ ದಾಳಿಯನ್ನು ನಡೆಸಲಾಗುವುದಿಲ್ಲ ಎಂಬುದು ತಿಳಿದಿರುವ ಸಂಗತಿಯಾಗಿದೆ, ಏಕೆಂದರೆ ಓಪನ್‌ಬಿಎಸ್‌ಡಿ ಕರ್ನಲ್ ಎಕ್ಸಿಕ್ವೆ() ಅನ್ನು ಕರೆದಾಗ ಶೂನ್ಯ argc ಮೌಲ್ಯವನ್ನು ರವಾನಿಸಲು ಅನುಮತಿಸುವುದಿಲ್ಲ.

pkexec ಆಜ್ಞೆಯನ್ನು ಸೇರಿಸಿದಾಗಿನಿಂದ ಮೇ 2009 ರಿಂದ ಸಮಸ್ಯೆ ಇದೆ. PolKit ದುರ್ಬಲತೆಗಾಗಿ ಪರಿಹಾರವು ಪ್ರಸ್ತುತ ಪ್ಯಾಚ್ ಆಗಿ ಲಭ್ಯವಿದೆ (ಯಾವುದೇ ಪ್ಯಾಚ್ ಬಿಡುಗಡೆಯನ್ನು ಬಿಡುಗಡೆ ಮಾಡಲಾಗಿಲ್ಲ), ಆದರೆ ವಿತರಣಾ ಅಭಿವರ್ಧಕರಿಗೆ ಸಮಸ್ಯೆಯ ಬಗ್ಗೆ ಮುಂಚಿತವಾಗಿ ತಿಳಿಸಲಾಗಿರುವುದರಿಂದ, ಹೆಚ್ಚಿನ ವಿತರಣೆಗಳು ದುರ್ಬಲತೆಯ ಬಗ್ಗೆ ಮಾಹಿತಿಯ ಬಹಿರಂಗಪಡಿಸುವಿಕೆಯೊಂದಿಗೆ ಏಕಕಾಲದಲ್ಲಿ ನವೀಕರಣವನ್ನು ಪ್ರಕಟಿಸಿದವು. ಸಮಸ್ಯೆಯನ್ನು RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ಮತ್ತು Manjaro ನಲ್ಲಿ ಪರಿಹರಿಸಲಾಗಿದೆ. ದುರ್ಬಲತೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲು ತಾತ್ಕಾಲಿಕ ಕ್ರಮವಾಗಿ, ನೀವು /usr/bin/pkexec ಪ್ರೋಗ್ರಾಂನಿಂದ SUID ರೂಟ್ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ತೆಗೆದುಹಾಕಬಹುದು ("chmod 0755 /usr/bin/pkexec").



ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ