[하루한줄] CVE-2021-3156 : heap overflow in sudo
URL
CVE-2021-3156 : heap-based buffer overflow in sudo
Target
sudo < 1.9.5p2
Explain
Qualys Research Team에서 CVE-2021-3156에 대한 세부 정보를 공개했습니다. sudo는 잠시 다른 유저의 권한을 갖고 프로그램을 실행할 수 있게 해주는 명령어로 거의 모든 Unix 계열 운영체제에서 사용합니다. sudo에 Heap-based Buffer Overlow 취약점이 존재하여 이를 통해 root 권한으로 상승할 수 있습니다.
sudo에 -s
옵션을 붙여 MODE_SHELL
flag값을 설정하거나 -i
옵션을 붙여 MODE_LOGIN_SHELL
flag값을 설정하면 sudo의 main()
에서 argv를 재설정합니다. 모든 command line argument의 meta-character앞에 \
(백슬래쉬)를 추가해 escape 한 뒤 하나의 문자열로 묶습니다(concatenate). 만약 하나로 묶인 command line argument가 \
로 끝나면
...
if (ISSET(sudo_mode, MODE_SHELL|MODE_LOGIN_SHELL)) {
...
for (to = user_args, av = NewArgv + 1; (from = *av); av++) {
while (*from) {
if (from[0] == '\\' && !isspace((unsigned char)from[1]))
from++;
*to++ = *from++;
}
*to++ = ' ';
}
...
}
이를 heap-based buffer(user_args
)에 옮기는 작업 중 NULL-terminator를 무시하고 out-of-bound copy를 하게 됩니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.