Root-ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² sudo, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Linux Mint ΠΈ Elementary OS

Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ sudo, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2019-18634), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ свои ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π² систСмС Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся начиная с выпуска sudo 1.7.1 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании Π² Ρ„Π°ΠΉΠ»Π΅ /etc/sudoers ΠΎΠΏΡ†ΠΈΠΈ «pwfeedback», которая ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дистрибутивах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Linux Mint ΠΈ Elementary OS. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° устранСна Π² выпускС sudo 1.8.31, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΌ нСсколько часов Π½Π°Π·Π°Π΄. Π’ дистрибутивах ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° остаётся нСисправлСнной.

ΠžΠΏΡ†ΠΈΡ «pwfeedback» Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ символа «*» послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ символа ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ пароля. Из-Π·Π° ошибки Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getln(), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ tgetpass.c, пСрСданная Ρ‡Π΅Ρ€Π΅Π· стандартный Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (stdin) слишком большая строка с ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… условиях ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² стСкС. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²ΠΎ врСмя выполнСния ΠΊΠΎΠ΄Π° sudo с ΠΏΡ€Π°Π²Π°ΠΌΠΈ root.

Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Π² процСссС Π²Π²ΠΎΠ΄Π° спСцсимвола ^U (очистка строки) ΠΈ ΠΏΡ€ΠΈ сбоС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° очистку Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… символов «*», сбрасываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ доступном Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Π±ΡƒΡ„Π΅Ρ€Π°, Π½ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² Π±ΡƒΡ„Π΅Ρ€Π΅. Π”Ρ€ΡƒΠ³ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ эксплуатации, являСтся отсутствиС автоматичСского ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° «pwfeedback» ΠΏΡ€ΠΈ поступлСнии Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π° Ρ‡Π΅Ρ€Π΅Π· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (данная Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ условия для возникновСния ошибки записи, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° систСмах с ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ записи Π·Π° ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π° для чтСния).

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² стСкС, Π½Π΅ прСдставляСт трудности созданиС эксплоита, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ свои ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ эксплуатирована Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, нСзависимо ΠΎΡ‚ ΠΏΡ€Π°Π² Π½Π° использованиС sudo ΠΈ наличия спСцифичных для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ настроСк Π² sudoers. Для блокирования ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² отсутствии Π² /etc/sudoers настройки «pwfeedback» ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‘ («Defaults !pwfeedback»). Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄:

$ perl -e ‘print((«A» x 100 . «\x{00}») x 50)’ | sudo -S id
Password: Segmentation fault

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ