
CVE-2024-29296 - Portainer CE 2.19.4 사용자 열거
Portainer CE 2.19.4에서 사용자 열거 취약점이 발견되었습니다. 이 문제는 사용자 인증 과정에서 발생하며, 응답 시간의 차이로 인해 원격의 인증되지 않은 사용자가 사용자 이름의 유효성을 확인할 수 있습니다.
이 취약점은 Portainer의 이슈 #11736에서 수정되었으며, Portainer CE 버전 2.19.5 및 2.20.2에 포함되었습니다.
저는 Portainer 인스턴스의 로그인 페이지에 대해 패스워드 스프레이 공격을 시도하던 중 이 취약점을 발견했습니다. 다양한 사용자 이름과 비밀번호로 Portainer 애플리케이션의 로그인 폼에 여러 요청을 전송했습니다.
사용자 존재 여부와 관계없이, 사용자 이름 + 비밀번호 조합이 올바르지 않으면 Portainer 애플리케이션의 백엔드는 동일한 HTTP 상태 코드로 응답합니다. 이는 유효한 사용자를 열거하려는 시도를 방지하거나 방해하는 최선의 접근 방식에 부합합니다.
그러나 패스워드 스프레이 결과를 살펴보면서 일부 사용자 이름에 대한 로그인 시도는 일관되게 특정 평균 시간이 걸리는 반면, 다른 사용자 이름에 대한 로그인 시도는 눈에 띄게 더 긴 평균 시간이 걸린다는 것을 알아차렸습니다.
시스템은 존재하는 사용자의 경우 비밀번호의 유효성을 확인해야 하지만, 사용자 이름이 처음부터 유효하지 않은 경우에는 그럴 필요가 없습니다. 따라서 저는 로그인 시도 평균 시간의 눈에 띄는 변화가 그와 관련이 있다고 추정했습니다. 그런 다음 로컬에 Portainer CE 2.19.4 사본을 설치하고 동일한 결과로 동작을 재현해 보았습니다.
다음은 제가 보낸 요청 형식입니다. 사용자 이름 및 비밀번호 필드는 페이로드를 삽입하기 위해 선택되었습니다.

다음은 사용자 이름 필드에 삽입한 사용자들입니다. 이 테스트에서는 "admin"과 "felipe" 사용자만 유효했습니다. 목록의 다른 모든 사용자 이름은 기존 사용자에 해당하지 않았습니다.

그리고 다음은 비밀번호 필드에 삽입한 비밀번호입니다.

각 고유한 사용자 이름-비밀번호 쌍에 대해 서버에 요청이 전송되었습니다. 결과는 아래와 같습니다.

사용자 이름이 존재하는 사용자에 해당하는 경우, 로그인 시도가 존재하지 않는 사용자에 대한 로그인 시도보다 일관되고 눈에 띄게 더 많은 시간이 소요됩니다.
이는 해당 버전의 Portainer 시스템이 유효한 사용자 열거에 취약함을 의미합니다. 즉, 백엔드가 로그인 시도에 응답하는 데 걸리는 시간을 살펴봄으로써 공격자가 애플리케이션의 사용자를 열거할 수 있습니다.