v1.22.0까지의 nanoMODBUS에는 nanomodbus.c의 recv_read_registers_res()에 스택 기반 버퍼 오버플로가 있습니다. 클라이언트가 nmbs_read_holding_registers() 또는 nmbs_read_input_registers()를 호출하면 라이브러리는 byte_count가 요청된 수량과 일치하는지 확인하기 전에 응답의 byte_count 필드를 기반으로 서버 응답의 레지스터 데이터를 호출자가 제공한 버퍼에 씁니다. 악의적인 Modbus TCP 서버는 요청된 qu와 관계없이 byte_count=250(125개 레지스터)으로 응답을 보낼 수 있습니다.
v1.22.0까지의 nanoMODBUS에는 nanomodbus.c의 recv_read_registers_res()에 스택 기반 버퍼 오버플로가 있습니다. 클라이언트가 nmbs_read_holding_registers() 또는 nmbs_read_input_registers()를 호출하면 라이브러리는 byte_count가 요청된 수량과 일치하는지 확인하기 전에 응답의 byte_count 필드를 기반으로 서버 응답의 레지스터 데이터를 호출자가 제공한 버퍼에 씁니다. 악의적인 Modbus TCP 서버는 요청 수량에 관계없이 byte_count=250(레지스터 125개)으로 응답을 보낼 수 있으며, 이로 인해 최대 248바이트의 공격자가 제어하는 데이터가 버퍼 오버플로되어 잠재적으로 원격 코드 실행이 허용될 수 있습니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 82.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 82.00 |
VPI 공식 vpi-v1 기준