[하루한줄] CVE-2024-45751: tgt의 CHAP authentication 우회 취약점
URL
https://seclists.org/oss-sec/2024/q3/254
Target
- tgt < 1.0.93
Explain
tgt(The Linux target framework)는 iSCSI, iSER 등의 전송 프로토콜을 지원하는 SCSI 타겟 프레임워크입니다.
tgt는 CHAP(Challenge-Handshake Autentication Protocol) 인증을 지원하는데 이때 사용되는 난수(challenge)를 rand
함수를 통해 생성합니다.
static int chap_initiator_auth_create_challenge(struct iscsi_connection *conn)
{
char *value, *p;
char text[CHAP_CHALLENGE_MAX * 2 + 8];
static int chap_id;
int i;
[...]
/*
* FIXME: does a random challenge length provide any benefits security-
* wise, or should we rather always use the max. allowed length of
* 1024 for the (unencoded) challenge?
*/
conn->auth.chap.challenge_size = (rand() % (CHAP_CHALLENGE_MAX / 2)) + CHAP_CHALLENGE_MAX / 2;
conn->auth.chap.challenge = malloc(conn->auth.chap.challenge_size);
if (!conn->auth.chap.challenge)
return CHAP_TARGET_ERROR;
p = text;
strcpy(p, "0x");
p += 2;
for (i = 0; i < conn->auth.chap.challenge_size; i++) {
conn->auth.chap.challenge[i] = rand();
sprintf(p, "%.2hhx", conn->auth.chap.challenge[i]);
p += 2;
}
text_key_add(conn, "CHAP_C", text);
return 0;
}
이때 위와 같이 srand
함수 호출 없이 rand
를 사용하는 것을 볼 수 있고 이로 인해 default seed 값이 사용되면서 rand
가 반환하는 난수를 예측할 수 있어 취약점이 발생했습니다.
매 인증마다 기본 seed가 사용되면서 인증에 사용되는 challenge 값들과 그 순서가 항상 동일하게 되기 때문에 iSCSI target과 initiator 사이의 통신을 스니핑해서 알아낸 challenge 값을 재사용하는 것으로 CHAP 인증을 우회할 수 있습니다. 인증이 우회되면 공격자는 사용자의 권한으로 iSCSI 타겟을 조작하는 등의 행위가 가능합니다.
Reference
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.