Linux 커널에서는 다음 취약점이 해결되었습니다. netfilter: nf_conntrack_sip: simple_strtoul을 사용하지 마세요 epaddr_len(), ct_sip_parse_header_uri()에서 안전하지 않은 포트 구문 분석을 교체합니다. 그리고 ct_sip_parse_request()를 새로운 sip_parse_port() 도우미와 함께 사용하면 됩니다. 버퍼 제한에 대해 각 숫자의 유효성을 검사하여 NUL로 끝나는 문자열을 가정하는 simple_strtoul(). 이전 코드에서는 범위 검사 없이 포인터를 역참조했습니다. sip_parse_addr() 및 simple_strto에 의존함
Linux 커널에서는 다음 취약점이 해결되었습니다.
netfilter: nf_conntrack_sip: simple_strtoul을 사용하지 마세요
epaddr_len(), ct_sip_parse_header_uri()에서 안전하지 않은 포트 구문 분석을 교체합니다. 그리고 ct_sip_parse_request()를 새로운 sip_parse_port() 도우미와 함께 사용하면 됩니다. 버퍼 제한에 대해 각 숫자의 유효성을 검사하여 NUL로 끝나는 문자열을 가정하는 simple_strtoul().
이전 코드에서는 범위 검사 없이 포인터를 역참조했습니다. sip_parse_addr() 및 NUL로 종료되지 않은 경우 simple_strtoul()에 의존함 skb 데이터입니다. 후행 없이 버퍼 한계에 도달한 포트 문자도 잘못된 형식으로 거부됩니다.
또한 conntrack에서 모든 simple_strtoul() 사용법을 제거하고 대신 더 엄격한 버전이 필요합니다. 의도적인 변경 사항이 있습니다.
숫자가 UINT_MAX보다 크면 구제 조치를 취하고 실패를 나타냅니다. 너무 긴 시퀀스. 05535를 포트 5535로 허용하지만, 예를 들어 05535는 허용하지 않습니다. 'sip:10.0.0.1:005060'. RFC 3261에서는 구문적으로 유효하지만, 우리는 이것이 제시될 때 주기를 낭비하지 않도록 제한해야 합니다. 64k '0' 문자로 구성된 잘못된 패킷입니다.
ct_sip_parse_numerical_param()에서 기본 10을 강제 적용합니다. 이는 가져오는 데 사용됩니다. '만료=' 및 'rports='; 둘 다 base-10을 사용할 것으로 예상됩니다.
nf_nat_sip.c에서 1k-64k 내에 있는 경우에만 구문 분석된 값을 허용합니다. 범위.
epaddr_len은 이제 이미 그랬듯이 포트가 유효하지 않으면 0을 반환합니다. 잘못된 IP 주소의 경우. 이는 의도적인 것입니다. nf_conntrack_sip 메시지의 올바른 부분을 찾기 위해 많은 추측을 수행합니다. 구문 분석합니다. 더 엄격하게 설정하면 기존 설정이 손상될 수 있습니다. 연결 추적 도우미는 트래픽을 허용하도록 설계되었습니다. 막지 말고 패스하세요.
Jenny Guanni Qu qguanni@gmail.com의 이전 패치를 기반으로 합니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 98.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 98.00 |
VPI 공식 vpi-v1 기준