Linux 커널에서는 다음 취약점이 해결되었습니다. smb: 클라이언트: OOB가 구문 분석 심볼릭 링크 오류 응답 읽기를 수정합니다. CREATE가 STATUS_STOPPED_ON_SYMLINK를 반환하면 smb2_check_message() 길이 검증 없이 성공을 반환하고 심볼릭 링크는 그대로 유지됩니다. 파서는 신뢰할 수 없는 서버에 대한 유일한 방어 수단입니다. Symlink_data()는 루프 테스트 "p <를 사용하여 SMB 3.1.1 오류 컨텍스트를 탐색합니다. end"이지만 오프셋 4에서 p->ErrorId를 읽고 오프셋에서 p->ErrorDataLength를 읽습니다. 0. 서버 제어 오류가 발생한 경우
Linux 커널에서는 다음 취약점이 해결되었습니다.
smb: 클라이언트: OOB가 구문 분석 심볼릭 링크 오류 응답 읽기를 수정합니다.
CREATE가 STATUS_STOPPED_ON_SYMLINK를 반환하면 smb2_check_message() 길이 검증 없이 성공을 반환하고 심볼릭 링크는 그대로 유지됩니다. 파서는 신뢰할 수 없는 서버에 대한 유일한 방어 수단입니다.
Symlink_data()는 루프 테스트 "p <를 사용하여 SMB 3.1.1 오류 컨텍스트를 탐색합니다. end"이지만 오프셋 4에서 p->ErrorId를 읽고 오프셋에서 p->ErrorDataLength를 읽습니다. 0. 서버가 제어하는 ErrorDataLength가 p를 1-7 이내로 증가시키는 경우 end 바이트이면 다음 반복에서는 이를 지나서 읽혀집니다. 일치할 때 컨텍스트가 발견되면 Sym->SymLinkErrorTag가 오프셋 4에서 읽혀집니다. p->ErrorContextData는 심볼릭 링크 헤더 자체가 맞는지 확인하지 않습니다.
smb2_parse_symlink_response()는 대체 이름의 범위를 확인합니다. SMB2_SYMLINK_STRUCT_SIZE를 PathBuffer의 오프셋으로 사용 iov_base. 해당 값은 sizeof(smb2_err_rsp) + sizeof(smb2_symlink_err_rsp), 이는 다음 경우에만 정확합니다. ErrorContextCount == 0.
오류 컨텍스트가 하나 이상 있는 경우 심볼릭 링크 데이터는 8바이트 더 깊이 위치합니다. 건너뛴 각 일치하지 않는 컨텍스트는 8 +만큼 더 이동합니다. ALIGN(오류 데이터 길이, 8). 수표가 너무 짧아서 iov_len을 지나 실행하기 위한 대체 이름 읽기입니다. 범위를 벗어난 힙 바이트 UTF-16으로 심볼릭 링크 대상으로 디코딩되어 다음을 통해 사용자 공간으로 반환됩니다. 읽기링크(2).
루프 테스트에 전체 컨텍스트 헤더가 필요하도록 하여 이 모든 문제를 해결하세요. 맞추기 위해 헤더가 끝을 넘으면 Sym을 거부하고 바인딩합니다. 오히려 Sym->PathBuffer의 실제 위치에 대해 대체 이름을 사용합니다. 고정 오프셋보다
sub_offs와 sub_len은 16비트이므로 포인터 수학은 여기에 새로운 보다 큰 값이 넘치게 됩니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 81.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 81.00 |
VPI 공식 vpi-v1 기준