🇰🇷 한글 설명
Linux 커널의 qla4xxx SCSI 드라이버에서 netlink 속성(nlattr)을 파싱할 때 길이 검사가 누락되어 있습니다. 길이가 0인 등 잘못된 nlattr이 전달되면 범위를 벗어난 읽기가 발생해 힙 메모리 데이터가 노출될 수 있습니다. 수정으로 nla_len 검사를 추가하고 실패 시 EINVAL을 반환하도록 변경되었습니다.
💡 쉬운 설명
리눅스 커널 안의 특정 하드웨어 드라이버가 외부에서 받은 데이터의 길이를 확인하지 않아 메모리 일부가 새어 나갈 수 있는 문제입니다. 해당 드라이버를 쓰는 시스템에서는 커널 업데이트로 이 문제를 막을 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: qla4xxx: Add length check when parsing nlattrs
There are three places that qla4xxx parses nlattrs:
- qla4xxx_set_chap_entry()
- qla4xxx_iface_set_param()
- qla4xxx_sysfs_ddb_set_param()
and each of them directly converts the nlattr to specific pointer of
structure without length checking. This could be dangerous as those
attributes are not validated and a malformed nlattr (e.g., length 0) could
result in an OOB read that leaks heap dirty data.
Add the nla_len check before accessing the nlattr data and return EINVAL if
the length check fails.
📍 영향받는 시스템
qla4xxx 드라이버를 포함한 수정 이전의 Linux 커널 버전 (QLogic iSCSI 어댑터 사용 시)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 잘못된 길이의 netlink 메시지를 보내 커널 힙 메모리 일부를 읽어내는 방식
🛡️ 대응 방법
배포판에서 제공하는 보안 업데이트가 적용된 최신 커널로 업데이트하고 재부팅합니다.
🔧 검증 코드
커널 버전이 수정 패치가 포함된 배포판 업데이트 버전 이상이면 해결된 것이며, qla4xxx 모듈이 로드되지 않았다면 이 취약점의 영향을 받지 않습니다.
uname -r && (lsmod | grep -E 'qla4xxx' || echo 'qla4xxx module not loaded')