[하루한줄] CVE-2021-27365: Linux 커널에서 발견된 15년간 존재한 권한상승 취약점
URL
New Old Bugs in the Linux Kernel
Target
- Linux 배포판(RHEL 8.1, 8.2 및 8.3에서 테스트됨)
Explain
Linux 커널의 하위 시스템인 SCSI (Small Computer System Interface)이 포함된 배포판에서 heap buffer overflow을 통한 권한 상승 취약점이 발견되었습니다. 해당 취약점은 15년간 존재했던 것으로 알려졌습니다.
취약점은 iscsi_session_get_param
함수에 존재합니다. 유저는 호스트 이름, 유저 이름과 같은 iSCSI 연결과 관련된 속성을 설정하는 iSCSI 하위 시스템에 netlink 메시지를 보낼 수 있습니다. netlink 메시지의 최대 길이는 시스템에 따라 2^32
또는 2^16
크기입니다.
switch(param) {
...
case ISCSI_PARAM_USERNAME:
len = sprintf(buf, "%s\\n", session->username);
break;
case ISCSI_PARAM_USERNAME_IN:
len = sprintf(buf, "%s\\n", session->username_in);
break;
case ISCSI_PARAM_PASSWORD:
len = sprintf(buf, "%s\\n", session->password);
break;
case ISCSI_PARAM_PASSWORD_IN:
len = sprintf(buf, "%s\\n", session->password_in);
break;
case ISCSI_PARAM_IFACE_NAME:
len = sprintf(buf, "%s\\n", session->ifacename);
break;
case ISCSI_PARAM_INITIATOR_NAME:
len = sprintf(buf, "%s\\n", session->initiatorname);
break;
...
메시지의 각 속성은 sprintf
함수로 처리되고 할당되는 버퍼 크기는 커널의 PAGE_SIZE
로 설정되며 크기에 대한 검사가 없습니다. 따라서 속성을 PAGE_SIZE
보다 많이 입력하면 buffer overflow를 트리거할 수 있습니다.
현재까지 확인된 취약한 배포판은 libiscsi
커널 모듈을 자동 로드하는 CentOS 및 RHEL 버전 8.1, 8.2, 8.3이며 다른 배포판 또한 해당 모듈이 로드되어 있으면 공격 조건을 만족합니다. 그 외 CVE-2021-27363(커널 포인터 유출 취약점), CVE-2021-27364(커널 OOB read 취약점) 또한 동일한 SCSI 라이브러리에서 발견되었습니다.
취약점의 패치 히스토리는 torvalds/linux 에서 확인할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.