반응형
Type Confusion
Type Confusion은 프로그래밍 언어에서 발생할 수 있는 취약점 중 하나로, 데이터 타입이 불일치하는 상황에서 발생할 수 있습니다. 예를 들어, 어떤 프로그램에서 문자열을 입력받아 처리하는 기능이 있다고 가정해보겠습니다. 이때, 사용자가 문자열 대신 정수형 데이터를 입력할 경우, 프로그램은 예상치 못한 방식으로 작동할 수 있습니다.
※ 주로 변수나 객체를 선언 또는 초기하였을 때와는 다른 타입으로 사용할 때 발생
이처럼 프로그램에서는 예상치 못한 데이터 타입 변환이 일어나는 상황에서 Type Confusion 취약점이 발생할 수 있습니다. 참고로 Type Confusion은 메모리 손상 등의 심각한 보안 문제를 야기할 수 있으며, 악의적인 공격자가 해당 취약점을 이용해 시스템을 침해하는 경우도 많습니다.
Type Confusion 예제 코드
이 취약점은 아래의 예제와 같이 단순히 프로그램이 본래 의도했던 로직과는 다르게 작동하는 경우도 있지만, RCE(Remote Controll Exectuion)까지 가능할 수 있는 매우 위험한 취약점 입니다.
예제 코드에 대한 자세한 설명은 주석에 달아놓았습니다.
#include <iostream>
class Animal {
public:
virtual void make_sound() {
std::cout << "Animal sound" << std::endl;
}
};
class Dog : public Animal {
public:
virtual void make_sound() {
std::cout << "Bark" << std::endl;
}
};
class Cat : public Animal {
public:
virtual void make_sound() {
std::cout << "Meow" << std::endl;
}
};
int main() {
// Animal 포인터 변수 animal을 선언하고, Dog 클래스의 객체를 생성하여 대입합니다.
Animal* animal = new Dog();
// Cat 포인터 변수 cat을 선언하고, animal을 Cat 클래스로 형 변환하고 있습니다.
// 이때, animal이 가리키는 객체는 Dog 클래스의 객체이므로 Type Confusion 취약점이 발생합니다.
Cat* cat = static_cast<Cat*>(animal);
// cat이 가리키는 객체는 Dog 클래스의 객체이므로, make_sound 함수가 Bark를 출력하게 됩니다.
// 이는 원래 목적과 다른 동작을 유발할 수 있기 때문에 보안 취약점으로 이어질 수 있습니다.
cat->make_sound();
return 0;
}
실제 Adobe Flash에서 Type Confusion 취약점으로 RCE 취약점이 발생했었습니다. Hahwul님이 해당 취약점을 자신의 블로그에 상세히 포스팅해 주셨는데, 궁금하신 분들은 아래의 링크를 통해 참고해주세요.
'Hack > System' 카테고리의 다른 글
Ghidra ARM64 설치 가이드 for MAC M1 or M2 Chip (0) | 2022.11.08 |
---|---|
[MS Office 1-Day] Follina 취약점(CVE-2022-30190) (0) | 2022.07.02 |
Log4Shell (Log4j 0day RCE, CVE-2021-44228) (0) | 2022.04.01 |
Windows에서 Metasploit 설치 (0) | 2020.09.21 |
[Hover with Power] PowerPoint를 통한 Mouse Over Attack (0) | 2020.09.21 |
댓글