🇰🇷 한글 설명
Linux 커널의 ltc4282 하드웨어 모니터링 드라이버에서 음수 전류 제한 값이 입력될 경우 발생하는 취약점입니다. 음수 값이 부호 없는 64비트 정수로 잘못 변환되어 매우 큰 양수로 처리되며, 이 과정에서 계산 오류와 오버플로가 발생하여 값이 최대치로 고정되는 문제가 있습니다.
💡 쉬운 설명
전류 값을 조절할 때 실수로 마이너스(-) 값을 넣으면, 시스템이 이를 아주 큰 플러스(+) 값으로 잘못 인식하는 오류입니다. 이로 인해 전류 제한 설정이 의도와 다르게 최대치로 설정될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
hwmon: (ltc4282) Clamp negative current limits
When a negative value is passed to ltc4282_write_curr(), the signed long
val is cast directly to u64:
drivers/hwmon/ltc4282.c:ltc4282_write_curr() {
/* need to pass it in millivolt */
u32 in = DIV_ROUND_CLOSEST_ULL((u64)val * st->rsense, DECA * MICRO);
...
}
This cast converts negative inputs into large positive values. The
subsequent division result overflows the u32 in variable, truncating
to a pseudo-random positive value. When this is passed to
ltc4282_write_voltage_byte(), it is clamped to the maximum limit instead
of zero.
Clamp val to 0 and to the maximum supported upper limit before the cast
and assign the result to a 64-bit temporary variable before the division
to avoid the underflow and an also possible overflow.
📍 영향받는 시스템
Linux kernel (ltc4282 hwmon driver 포함 버전)
⚔️ 공격 벡터
로컬 사용자가 ltc4282 드라이버를 통해 음수 전류 제한 값을 입력하여 하드웨어 설정 오류 유도
🛡️ 대응 방법
커널 패치를 적용하여 입력 값을 0과 최대 제한 범위 내로 제한(Clamping)하고 계산 시 64비트 임시 변수를 사용하도록 업데이트
🔧 검증 코드
명령어 결과로 해당 함수가 포함된 소스 코드가 출력되면 취약한 드라이버가 로드되어 있을 가능성이 높습니다.
grep -r "ltc4282_write_curr" /lib/modules/$(uname -r)/kernel/drivers/hwmon/ 2>/dev/null