Wins blog

글로벌 정보보안 파트너! Global Security  No.1 윈스는 국가대표 정보보안 기업에서 글로벌 강소기업으로 도약합니다.

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2019-15107] Webmin 패스워드 변경 모듈 취약점
작성일 2019-08-29 조회 1557

 

 

Webmin 은 널리 사용되는 Linux/Unix 시스템 관리 도구로, Gitub 페이지에서 Webmin 팀은 응용 프로그램이 전 세계적으로 1,000,000 대이상 설치되었다고 주장합니다.

 

최근, Webmin 의 공급망 공격으로 인해 password_change.cgi 모듈에 Backdoor 코드가 삽입으로 인한  Unauthenticated RCE(Remote Code Execution) 취약점이 발견되어 이슈되고 있습니다.

 

쇼단을 통해 검색한 결과 220,000 개 이상의 Webmin 공개 접근 시스템이 존재하며, Binary Edge 에 따르면 Webmin 1.890 버전이 구동되고 있는 공개 접근 시스템이 거의 28,000 개에 달한다고 설명합니다.

 

 


 

[그림1. Shodan Query 결과]

 

 

 

더불어, 취약점이 발표된 8월 동안에 CVE-2019-15107 취약점 스캐닝 공격이 지속적으로 유입되고 있는 것을 확인할 수 있습니다.

 

 


 

[그림2. CVE-2019-15107 취약점 스캔 탐지 월간 그래프 (출처 : 윈스 허니넷)]

 

 

해당 취약점은 일부 버전의 설치 패키지 및 소스코드에 1년 이상의 기간 동안 삽입되어 있던 백도어가 발생 원인이었으며, 개발자는 공식적으로 Webmin 다운로드 할 수 있는 Github 가 아닌 프로젝트의 SourceForge 저장소에서만 백도어 패키지로 대체되었음을 확인했다.

 

공격 성공 시, 공격자는 임의의 명령을 실행할 수 있습니다.

 

 


취약점 설명

 

NVD - CVE-2019-15107

CVSS v2.0 Severity and Metrics:

Base Score: 10.0 HIGH

 

 


 

[그림3. NVD 내역]

 

 


취약점 분석

 

해당 취약점은 일부 버전의 설치 패키지 및 소스코드에 1년 이상의 기간 동안 삽입되어 있던 백도어가 발생 원인입니다.

 

Webmin 1.890 버전에서는 별도의 설정없이 기본 구성 시 취약점에 노출되어 있으며, 1.882 - 1.920 버전에서는 "사용자 비밀번호 변경" 옵션이 활성화되어 있어야 합니다.

 

 

[Webmin 1.890]

 

 

[그림4. Webmin 1.890 취약 코드]

 

 

[Webmin 1.882 - 1.920]

 

 

[그림5. Webmin 1.882 - 1.920 취약 코드]

 

 

 

 

 

공격 분석

 

Webmin 1.882 - Webmin 1.920 버전에서의 취약점에 대해 다루도록 하겠습니다.

 

취약점은 2019 년 8 월에 공개되었습니다. 취약점은 password_change.cgi 모듈에서 발생합니다. 

 

 

이전에도 설명했듯이 취약점을 트리거하기 위해서는 "사용자 비밀번호 변경" 옵션을 활성화해야 합니다. (passwd_mode = 2)

 

만약 변경할 패스워드가 비어있거나 같지 않을 경우 에러가 발생합니다.

 

 

 

[그림6. 사용자 비밀번호 변경 옵션 활성화]

 

 

 

[그림7. password_change.cgi 코드 중 일부]

 

 

 

위의 조건을 만족할 경우, Webmin 사용자인지 여부를 확인하는 코드가 실행됩니다.

 

$wuser 는 시스템 사용자이며, 패스워드 인증 방식이 "Unix authentication" 일 경우 $wuser = undef 값이 저장됩니다.

 

만약, 패스워드 인증 방식이 "No password accepted" 일 경우, $wuser -> {'pass'} 의 값은 "*LN*"값을 가지게 되어 에러를 출력합니다.

 

 

[그림8. password_change.cgi 코드 중 일부]

 

 

 

위 과정을 지나면 Webmin 사용자의 패스워드를 수정하는 조건문을 볼 수 있습니다.

 

재미있는 부분은, 비록 우리가 전달한 사용자가 비어있거나 존재하지 않더라도 if($wuser) 의 조건문을 통과할 수 있습니다. 또한 사용자 패스워드가 일치하지 않을 경우 임의의 명령을 실행할 수 있습니다.

 

그렇기 때문에, 악의적 목적을 가진 사용자가 어떠한 인증없이 취약점을 활용할 수 있습니다.

 

 

 

[그림9. password_change.cgi 코드 중 일부]

 

 

 

PoC 공격 패킷과 결과는 아래와 같다.

 

 

[그림10. 공격 패킷]

 

 

 

 

[그림11. 공격 결과]

 


취약점 대응 방안

 

1. 최신 버전 사용

 

해당 벤더사에서 발표한 보안 권고문을 참고하여 패치를 적용합니다.

 

http://www.webmin.com/security.html

 

 

2. WINS Sniper 대응 방안

 

*Sniper IPS

[4953] Webmin password_change.cgi Unauthenticated RCE
[4954] Webmin password_change.cgi Unauthenticated RCE

 

*Sniper UTM

[805375031] Webmin password_change.cgi Unauthenticated RCE
[805375032] Webmin password_change.cgi Unauthenticated RCE


*Sniper APTX

[4230] Webmin password_change.cgi Unauthenticated RCE
[4231] Webmin password_change.cgi Unauthenticated RCE

 

첨부파일 첨부파일이 없습니다.
태그