Go to Top

Go to Top

1%의 보안 사각지대로 발생하는 침해사고,
이제는 화이트해커와 함께할 때 입니다

1%의 보안 사각지대로 발생하는 침해사고, 이제는 화이트해커와 함께할 때 입니다

,
.

,
.

, .

보안을 최우선으로 여기는 기업은
이미 엔키화이트햇을 선택했습니다.

보안을 최우선으로 여기는 기업은
이미 엔키화이트햇을 선택했습니다.

보안을 최우선으로 여기는 기업은
이미 엔키화이트햇을 선택했습니다.

다양한 산업군의 프로젝트 경험의 축적된 노하우로
업계 특성과 고객 니즈에 맞춘 맞춤형 솔루션을 제공합니다.

다양한 산업군의 프로젝트 경험의 축적된 노하우로
업계 특성과 고객 니즈에 맞춘 맞춤형 솔루션을 제공합니다.

다양한 산업군의 프로젝트 경험의 축적된 노하우로 업계 특성과 고객 니즈에 맞춘 맞춤형 솔루션을 제공합니다.

대기업

금융기관

IT 및 보안기업

군/공공기관

대기업

금융기관

IT 및 보안기업

군/공공기관

대기업

금융기관

IT 및 보안기업

군/공공기관

원인을 알 수 없는 해킹과
끊이지 않는 침해사고

원인을 알 수 없는 해킹과
끊이지 않는 침해사고

원인을 알 수 없는 해킹과
끊이지 않는 침해사고

막연한 불안은 쌓여만 가고, 책임의 압박은
온전히 실무자에게 가중됩니다.

막연한 불안은 쌓여만 가고, 책임의 압박은
온전히 실무자에게 가중됩니다.

막연한 불안은 쌓여만 가고, 책임의 압박은 온전히 실무자에게 가중됩니다.

계속 발생하는 개인정보 유출 사고,우리 기업은 안전할까요?

계속 발생하는 개인정보 유출 사고, 우리 기업은 안전할까요?

계속 발생하는 개인정보 유출 사고, 우리 기업은 안전할까요?

통제 불가 IT 자산

통제 불가 IT 자산

통제 불가 IT 자산

고도화되는 공격

고도화되는 공격

고도화되는 공격

잦은 기능 업데이트

잦은 기능 업데이트

잦은 기능 업데이트

잦은 기능 업데이트

늘어나는 협력사 연결

늘어나는 협력사 연결

늘어나는 협력사 연결

클라우드·원격 근무

클라우드·원격 근무

클라우드·원격 근무

AI 서비스 활용

AI 서비스 활용

AI 서비스 활용

AI 서비스 활용

부족한 보안 인력

부족한 보안 인력

부족한 보안 인력

강화되는 규제 요구

강화되는 규제 요구

강화되는 규제 요구

이제, 공격자보다 한 발 앞서 예방하세요

이제, 공격자보다 한 발 앞서 예방하세요

이제, 공격자보다 한 발 앞서 예방하세요

이제, 공격자보다 한 발 앞서 예방하세요

이제, 공격자보다 한 발 앞서 예방하세요

이제, 공격자보다 한 발 앞서 예방하세요

기업 보안은 치밀해야 합니다.
단 1%의 보안사각지대를 노리는 공격자에 맞서 이제는 공격자처럼 사고하고
선제적으로 점검·대응하는 보안이 필요합니다.

기업 보안은 치밀해야 합니다.
단 1%의 보안사각지대를 노리는 공격자에 맞서 이제는 공격자처럼 사고하고
선제적으로 점검·대응하는 보안이 필요합니다.

기업 보안은 치밀해야 합니다.
단 1%의 보안사각지대를 노리는 공격자에 맞서 이제는 공격자처럼 사고하고
선제적으로 점검·대응하는 보안이 필요합니다.

기업을 위협하는 크리티컬한 취약점을 찾습니다

기업을 위협하는 크리티컬한 취약점을 찾습니다

기업을 위협하는 크리티컬한 취약점을 찾습니다

윤리적인 화이트해커가 공격자의 관점으로
실제 기업에게 경제피해, 정보유출, 서비스 장애 등으로
이어질수있는 보안문제를 미리찾습니다.

윤리적인 화이트해커가 공격자의 관점으로
실제 기업에게 경제피해, 정보유출, 서비스 장애 등으로
이어질수있는 보안문제를 미리찾습니다.

윤리적인 화이트해커가 공격자의 관점으로 실제 기업에게 경제피해, 정보유출, 서비스 장애 등으로 이어질수있는 보안문제를 미리찾습니다.

서버 장악 및 권한 획득

서버 장악 및 권한 획득

서버 보안을 상징하는 열쇠 아이콘

원격지에서 서버 최상위 권한 취득 가능성 검증

원격지에서 서버 최상위 권한 취득 가능성 검증

미사용 포트 및 취약 서비스 기반 서버 장악 시나리오 확인

미사용 포트 및 취약 서비스 기반 서버 장악 시나리오 확인

서비스 취약점 분석을 통해 내부 서버 접근 경로 확인

서비스 취약점 분석을 통해 내부 서버 접근 경로 확인

악성 행위

악성 행위

악성 행위를 상징하는 위험 신호 표시 아이콘

전자화폐(포인트) 복제 및 부정 결제 시도 재현

전자화폐(포인트) 복제 및 부정 결제 시도 재현

악성 앱 제작 및 유포 가능성 입증

악성 앱 제작 및 유포 가능성 입증

취약점(XSS, 정보 노출 등)을 통한 권한 상승 가능성 확인

취약점(XSS, 정보 노출 등)을 통한 권한 상승 가능성 확인

외주 직원/임직원 단말 보안 우회 가능 경로 검증

외주 직원/임직원 단말 보안 우회 가능 경로 검증

자료 유출

자료 유출

자료를 상징하는 폴더 아이콘

고객 개인정보, 내부 문건 등 중요 정보 유출 가능성 확인

고객 개인정보, 내부 문건 등 중요 정보 유출 가능성 확인

임의 명령 실행을 통해 외부 유출 위험 입증

임의 명령 실행을 통해 외부 유출 위험 입증

관리자 권한 탈취 후, 고객 정보 접근 가능 경로 확인

관리자 권한 탈취 후, 고객 정보 접근 가능 경로 확인

보안 솔루션 우회로 인한 데이터 반출 가능성 검증

보안 솔루션 우회로 인한 데이터 반출 가능성 검증

SSH 터널링을 통한 외부 전송 시나리오 재현

SSH 터널링을 통한 외부 전송 시나리오 재현

엔키 제품

엔키 제품

OFFen

OFFen

OFFen

취약점 점검,
더 이상 기다리지 마세요

취약점 점검,
더 이상 기다리지 마세요

OFFen 제품 자세히보기

OFFen 제품 자세히보기

OFFen 제품 자세히보기

ASM

ASM

ASM

시야 밖에 있던 위협을 누락없이 한눈에

시야 밖에 있던 위협을 누락없이 한눈에

Checklist/Offensive PT

Checklist/Offensive PT

Checklist/Offensive PT

ISMS-P 인증 최적화

원하는 만큼만, 특정 웹/앱/시스템 점검

ISMS-P 인증 최적화

원하는 만큼만, 특정 웹/앱/시스템 점검

Red Team

Red Team

Red Team

실전공격 시나리오로 전문 화이트해커의 End to End 보안점검

실전공격 시나리오로 전문 화이트해커의 End to End 보안점검

엔키 제품

엔키 제품

CAMP

CAMP

CAMP

긴급한 상황에서도 흔들리지않는 내부 대응력,
팀 전체의 실무역량을 한단계 더 끌어올리는
보안 역량 성장 플랫폼

긴급한 상황에서도 흔들리지않는 내부 대응력, 팀 전체의 실무역량을 한단계 더 끌어올리는 보안 역량 성장 플랫폼

CAMP 제품 자세히보기

CAMP 제품 자세히보기

CAMP 제품 자세히보기

교육

교육

교육

디지털 포렌식, 침해사고 대응, 악성코드 분석, 웹해킹,
보안장비운용 등 실무 중심의 이론과 실습을 통해
기초부터 탄탄하게 다지는 보안 역량

디지털 포렌식, 침해사고 대응, 악성코드 분석, 웹해킹, 보안장비운용 등 실무 중심의 이론과 실습을 통해 기초부터 탄탄하게 다지는 보안 역량

워게임

워게임

워게임

기술 분야별 실습 컨텐츠 풀이로 기본 역량을 강화하고
우수풀이(Write-up) 공유 및 랭크 시스템을 통한
학습 동기부여

기술 분야별 실습 컨텐츠 풀이로 기본 역량을 강화하고 우수풀이(Write-up) 공유 및 랭크 시스템을 통한 학습 동기부여

CTF

CTF

CTF

다양한 콘텐츠를 활용해 자체 CTF 환경을 비전공자도
쉽게 구성하고, 구성원 간 보안 역량 비교 진단

다양한 콘텐츠를 활용해 자체 CTF 환경을 비전공자도 쉽게 구성하고, 구성원 간 보안 역량 비교 진단

공방훈련

공방훈련

공방훈련

실제 해킹 사례 기반 콘텐츠(TTPs, 취약점, 시나리오) 를 활용하고 기업 환경을 반영한 가상 인프라에서
실시간 공격 및 방어 훈련을 통한 조직 내 협업 능력 강화

실제 해킹 사례 기반 콘텐츠(TTPs, 취약점, 시나리오) 를 활용하고 기업 환경을 반영한 가상 인프라에서 실시간 공격 및 방어 훈련을 통한 조직 내 협업 능력 강화

엔키 서비스

엔키 서비스

오펜시브 보안 점검

실전 경험과 높은 기술력을 갖춘 화이트해커가 기업 전반의 IT인프라를 점검하고, 경제적인 피해·정보 유출·서비스 장애로 이어질 수 있는 보안 위협을 사전에 식별·검증하여 대응 전략을 제시합니다.

자세히보기

레드팀

컴플라이언스 진단

모의해킹

이행점검

사이버 위협 인텔리전스

북한·중국·러시아 등 2만여 건 이상의 악성코드 분석 경험을 바탕으로, 전문가가 정제된 위협 인텔리전스와 맞춤 대응 전략을 제공합니다. 침해사고 시 공격자의 행위·피해 범위·침투 경로를 분석해 근본적인 위협을 제거합니다.

자세히보기

악성코드 분석

침해흔적 조사

보안 교육 및 훈련

사이버공격방어대회 국내 1위 기업의 노하우로, 실제 보안사고를 모사한 고품질 문제와 실전형 대회 운영을 제공합니다. 다수의 침투 테스트와 글로벌 대회 운영 경험을 바탕으로, 현업에 필요한 최신 보안 기술 교육과 맞춤형 실습 환경을 제공합니다.

자세히보기

실습형 교육

해킹 방어 대회 운영

악성 이메일 훈련

오펜시브 보안 점검

실전 경험과 높은 기술력을 갖춘 화이트해커가 기업 전반의 IT인프라를 점검하고, 경제적인 피해·정보 유출·서비스 장애로 이어질 수 있는 보안 위협을 사전에 식별·검증하여 대응 전략을 제시합니다.

자세히보기

레드팀

컴플라이언스 진단

모의해킹

이행점검

사이버 위협 인텔리전스

북한·중국·러시아 등 2만여 건 이상의 악성코드 분석 경험을 바탕으로, 전문가가 정제된 위협 인텔리전스와 맞춤 대응 전략을 제공합니다. 침해사고 시 공격자의 행위·피해 범위·침투 경로를 분석해 근본적인 위협을 제거합니다.

자세히보기

악성코드 분석

침해흔적 조사

보안 교육 및 훈련

사이버공격방어대회 국내 1위 기업의 노하우로, 실제 보안사고를 모사한 고품질 문제와 실전형 대회 운영을 제공합니다. 다수의 침투 테스트와 글로벌 대회 운영 경험을 바탕으로, 현업에 필요한 최신 보안 기술 교육과 맞춤형 실습 환경을 제공합니다.

자세히보기

실습형 교육

해킹 방어 대회 운영

악성 이메일 훈련

오펜시브 보안 점검

실전 경험과 높은 기술력을 갖춘 화이트해커가 기업 전반의 IT인프라를 점검하고, 경제적인 피해·정보 유출·서비스 장애로 이어질 수 있는 보안 위협을 사전에 식별·검증하여 대응 전략을 제시합니다.

자세히보기

레드팀

컴플라이언스 진단

모의해킹

이행점검

사이버 위협 인텔리전스

북한·중국·러시아 등 2만여 건 이상의 악성코드 분석 경험을 바탕으로, 전문가가 정제된 위협 인텔리전스와 맞춤 대응 전략을 제공합니다. 침해사고 시 공격자의 행위·피해 범위·침투 경로를 분석해 근본적인 위협을 제거합니다.

자세히보기

악성코드 분석

침해흔적 조사

보안 교육 및 훈련

사이버공격방어대회 국내 1위 기업의 노하우로, 실제 보안사고를 모사한 고품질 문제와 실전형 대회 운영을 제공합니다. 다수의 침투 테스트와 글로벌 대회 운영 경험을 바탕으로, 현업에 필요한 최신 보안 기술 교육과 맞춤형 실습 환경을 제공합니다.

자세히보기

실습형 교육

해킹 방어 대회 운영

악성 이메일 훈련

최신 위협 인사이트 및
보고서를 확인하세요

최신 위협 인사이트 및
보고서를 확인하세요

최신 위협 인사이트 및
보고서를 확인하세요

더보기

더보기

더보기

국내 IP에서 유포된 PureCrypter 적용 Formbook 페이로드 분석

위협 인텔리전스

국내 IP에서 유포된 PureCrypter 적용 Formbook 페이로드 분석

2025년 5월경 국내 ip 158.247.250[.]251와 관련있는 다수의 RAR, EXE 파일이 발견되었다. 해당 ip는 과거 DNS 기록에서 네이버 관련 피싱 인프라로 의심되는 도메인이 확인되었으며, VirusTotal에 네이버 로그인 관련 URL 질의 기록이 남아있다.caption - 158.247.250[.]251의 URL 질의 기록그중에 관련된 이메일 파일, 해당 이메일 첨부 파일인 RAR, EXE 파일은 한국에서 보고되었으며, 이메일을 수신한 이메일 계정 또한 한국 에너지 기업의 도메인이다. ip와 관련된 악성코드들은 한국 외에도 다양한 국가에 서로 다른 파일 이름으로 유포되었다. 유포된 파일은 분석 결과 PureCrypter로 패킹된 Formbook 악성코드로 확인되었다.

엔키화이트햇

2025. 8. 29.

국내 IP에서 유포된 PureCrypter 적용 Formbook 페이로드 분석

위협 인텔리전스

국내 IP에서 유포된 PureCrypter 적용 Formbook 페이로드 분석

2025년 5월경 국내 ip 158.247.250[.]251와 관련있는 다수의 RAR, EXE 파일이 발견되었다. 해당 ip는 과거 DNS 기록에서 네이버 관련 피싱 인프라로 의심되는 도메인이 확인되었으며, VirusTotal에 네이버 로그인 관련 URL 질의 기록이 남아있다.caption - 158.247.250[.]251의 URL 질의 기록그중에 관련된 이메일 파일, 해당 이메일 첨부 파일인 RAR, EXE 파일은 한국에서 보고되었으며, 이메일을 수신한 이메일 계정 또한 한국 에너지 기업의 도메인이다. ip와 관련된 악성코드들은 한국 외에도 다양한 국가에 서로 다른 파일 이름으로 유포되었다. 유포된 파일은 분석 결과 PureCrypter로 패킹된 Formbook 악성코드로 확인되었다.

엔키화이트햇

2025. 8. 29.

국내 IP에서 유포된 PureCrypter 적용 Formbook 페이로드 분석

위협 인텔리전스

국내 IP에서 유포된 PureCrypter 적용 Formbook 페이로드 분석

2025년 5월경 국내 ip 158.247.250[.]251와 관련있는 다수의 RAR, EXE 파일이 발견되었다. 해당 ip는 과거 DNS 기록에서 네이버 관련 피싱 인프라로 의심되는 도메인이 확인되었으며, VirusTotal에 네이버 로그인 관련 URL 질의 기록이 남아있다.caption - 158.247.250[.]251의 URL 질의 기록그중에 관련된 이메일 파일, 해당 이메일 첨부 파일인 RAR, EXE 파일은 한국에서 보고되었으며, 이메일을 수신한 이메일 계정 또한 한국 에너지 기업의 도메인이다. ip와 관련된 악성코드들은 한국 외에도 다양한 국가에 서로 다른 파일 이름으로 유포되었다. 유포된 파일은 분석 결과 PureCrypter로 패킹된 Formbook 악성코드로 확인되었다.

엔키화이트햇

2025. 8. 29.

취약점 연구

From Blink to Nt: Codegate 2025 FullChain Write-up

Challenge OverviewThe goal of the challenge is to find vulnerabilities in the renderer process and develop an exploit code by analyzing the provided rce-sbx-138-0-7204-97.patch file.The patch file creates a new Blink module called minishell in the renderer. It provides various shell functions and file writing and saving, and the file data is managed through Codegate File System (CFS), which is a browser API.The available commands are:They are similar to the basic shell commands. Commands such as exec are not implemented, but there are several file operations.When a file is opened, it is managed through file_descriptor_ in the form of a FileBuffer class until Save.A user can invoke the minishell as follows:Callable methods can be bound in the *idl file.In short, one user can have multiple shells and execute each command in one shell.VulnerabilityWe can see the main functionality in mini_shell.cc.However, the vulnerability is pretty simple compared to the file size. The following shows the FileBuffer structure.In here, we can see the fixed-size buffer. Let’s check the part which uses it.There is a size check for the input data vector, but there is no any bound check for idx_ so an out-of-bounds (OOB) read/write occurs.Although the vulnerability is simple, we need to obtain arbitrary address read / write primitives with this relative address read / write, and finally achieve Arbitrary Code Execution.Exploit - AAR/WNow, we have relative read / write primitive of uint64_t size. In fact, there is no difference in the method to achieve arbitrary address read / write.However, in order to access an arbitrary address, we must know the address of the current object. This is because we need to measure the distance to move to the target.There are various ways to leak the address of a controllable object.In this challenge, it is difficult to achieve address leakage with just a simple OOB read because there is no valid address area written anywhere in the heap area. Among them, we tried using brand new technique that can stably leak objects by utilizing the characteristics of Oilpan GC.Oilpan GCThe Heap object of Oilpan GC has the following structure [link].Oilpan GC uses a different allocation method than PartitionAlloc (PA), which is mark-and-sweep and space. Unlike PA, which uses slot-bucket, Oilpan allocates space for the heap and divides (i.e., allocates) the heap object as much as requested size from the space when a request comes in.In other words, without a fixed slot, it dynamically allocates multiple sizes in each space.When they lose their reference and are GC reclaims them, they take the form of FreeList::Entry.When an object in the space is freed, the HeapObject changes to a FreeList::Entry, and additional next_ fields are created to point to the next freed object.Leak IdeaThe idea is as follows:Loop the action below enough times to allocate new spaceSpray shell objectSpray File in each shellTrigger gc()Read the next_ of the header of the next adjacent chunk of FileBuffer in the N-th Sprayed ObjectLeak (N-1)th Sprayed_objectSince each shell has only one File Buffer, N shells are needed to spray N File Buffers.Considering the characteristics of the Oilpan GC described above, consider the following chunk situation.Currently, there is only my object in space. When an object is dynamically divided(i.e., allocated) from space, gc() is executed and the small areas between each object will be treated as Free Entry, forming a FreeList as shown above.We can now read the chained Free Entry by reading temp = sizeof(FileBuffer) + 0x8 from the Sprayed2 object, and leak the Sprayed 1 address through heap_leak = temp - sizeof(FileBuffer)This allows us to leak the address of the object with only spray and out-of-bounds, regardless of how big the distance is between Sprayed 1 and Sprayed 2 whether there is a stable address.Since we have the address of the Sprayed 1 object and the relative address read / write, we can perform arbitrary address read / write.In the exploit, after sufficient spray, it triggers gc() and then leaks objects 90th to 89th.Exploit - Arbitrary Code ExecutionNow, we obtain the arbitrary address read / write primitives.In a typical V8 engine, addrof is used to obtain address of a Wasm RWX Page. However, we only have OOB, and it seems difficult to create an addrof primitive.So what should we do?Overwrite the vtable of HeapMojoRemote to call 0x4141414141414141?The challenge says that it should be exploited on chrome.exe running on Windows 11 24H2. That is, in order to achieve arbitrary function calls in the challenge, CFG Bypass must be accompanied. Of course, considering the huge size of the code base, there may be many gadgets that can bypass CFG.Also, Function::Invoker Chaining, a well-known technique, can bypass CFG.We wanted to find a more stable method, and after auditing the code, we found that there is a LazyInstance Getter for WasmCodePointerObject. We can leak Wasm RWX Page by reading WasmCodePointerTable → entrypoint_.Let's overwrite RWX Page with arbitrary shellcode and execute wasm exports function.In the end, we can stably execute arbitrary shellcode while maintaining persistence. An interesting fact is that the bug of the SBX challenge can be triggered even in the Renderer. However, triggering the vulnerability requires a slight race condition in the SBX Challenge, we are unsure whether UAF Object can be reliably occupied in Blink.

엔키화이트햇

2025. 7. 21.

취약점 연구

From Blink to Nt: Codegate 2025 FullChain Write-up

Challenge OverviewThe goal of the challenge is to find vulnerabilities in the renderer process and develop an exploit code by analyzing the provided rce-sbx-138-0-7204-97.patch file.The patch file creates a new Blink module called minishell in the renderer. It provides various shell functions and file writing and saving, and the file data is managed through Codegate File System (CFS), which is a browser API.The available commands are:They are similar to the basic shell commands. Commands such as exec are not implemented, but there are several file operations.When a file is opened, it is managed through file_descriptor_ in the form of a FileBuffer class until Save.A user can invoke the minishell as follows:Callable methods can be bound in the *idl file.In short, one user can have multiple shells and execute each command in one shell.VulnerabilityWe can see the main functionality in mini_shell.cc.However, the vulnerability is pretty simple compared to the file size. The following shows the FileBuffer structure.In here, we can see the fixed-size buffer. Let’s check the part which uses it.There is a size check for the input data vector, but there is no any bound check for idx_ so an out-of-bounds (OOB) read/write occurs.Although the vulnerability is simple, we need to obtain arbitrary address read / write primitives with this relative address read / write, and finally achieve Arbitrary Code Execution.Exploit - AAR/WNow, we have relative read / write primitive of uint64_t size. In fact, there is no difference in the method to achieve arbitrary address read / write.However, in order to access an arbitrary address, we must know the address of the current object. This is because we need to measure the distance to move to the target.There are various ways to leak the address of a controllable object.In this challenge, it is difficult to achieve address leakage with just a simple OOB read because there is no valid address area written anywhere in the heap area. Among them, we tried using brand new technique that can stably leak objects by utilizing the characteristics of Oilpan GC.Oilpan GCThe Heap object of Oilpan GC has the following structure [link].Oilpan GC uses a different allocation method than PartitionAlloc (PA), which is mark-and-sweep and space. Unlike PA, which uses slot-bucket, Oilpan allocates space for the heap and divides (i.e., allocates) the heap object as much as requested size from the space when a request comes in.In other words, without a fixed slot, it dynamically allocates multiple sizes in each space.When they lose their reference and are GC reclaims them, they take the form of FreeList::Entry.When an object in the space is freed, the HeapObject changes to a FreeList::Entry, and additional next_ fields are created to point to the next freed object.Leak IdeaThe idea is as follows:Loop the action below enough times to allocate new spaceSpray shell objectSpray File in each shellTrigger gc()Read the next_ of the header of the next adjacent chunk of FileBuffer in the N-th Sprayed ObjectLeak (N-1)th Sprayed_objectSince each shell has only one File Buffer, N shells are needed to spray N File Buffers.Considering the characteristics of the Oilpan GC described above, consider the following chunk situation.Currently, there is only my object in space. When an object is dynamically divided(i.e., allocated) from space, gc() is executed and the small areas between each object will be treated as Free Entry, forming a FreeList as shown above.We can now read the chained Free Entry by reading temp = sizeof(FileBuffer) + 0x8 from the Sprayed2 object, and leak the Sprayed 1 address through heap_leak = temp - sizeof(FileBuffer)This allows us to leak the address of the object with only spray and out-of-bounds, regardless of how big the distance is between Sprayed 1 and Sprayed 2 whether there is a stable address.Since we have the address of the Sprayed 1 object and the relative address read / write, we can perform arbitrary address read / write.In the exploit, after sufficient spray, it triggers gc() and then leaks objects 90th to 89th.Exploit - Arbitrary Code ExecutionNow, we obtain the arbitrary address read / write primitives.In a typical V8 engine, addrof is used to obtain address of a Wasm RWX Page. However, we only have OOB, and it seems difficult to create an addrof primitive.So what should we do?Overwrite the vtable of HeapMojoRemote to call 0x4141414141414141?The challenge says that it should be exploited on chrome.exe running on Windows 11 24H2. That is, in order to achieve arbitrary function calls in the challenge, CFG Bypass must be accompanied. Of course, considering the huge size of the code base, there may be many gadgets that can bypass CFG.Also, Function::Invoker Chaining, a well-known technique, can bypass CFG.We wanted to find a more stable method, and after auditing the code, we found that there is a LazyInstance Getter for WasmCodePointerObject. We can leak Wasm RWX Page by reading WasmCodePointerTable → entrypoint_.Let's overwrite RWX Page with arbitrary shellcode and execute wasm exports function.In the end, we can stably execute arbitrary shellcode while maintaining persistence. An interesting fact is that the bug of the SBX challenge can be triggered even in the Renderer. However, triggering the vulnerability requires a slight race condition in the SBX Challenge, we are unsure whether UAF Object can be reliably occupied in Blink.

엔키화이트햇

2025. 7. 21.

취약점 연구

From Blink to Nt: Codegate 2025 FullChain Write-up

Challenge OverviewThe goal of the challenge is to find vulnerabilities in the renderer process and develop an exploit code by analyzing the provided rce-sbx-138-0-7204-97.patch file.The patch file creates a new Blink module called minishell in the renderer. It provides various shell functions and file writing and saving, and the file data is managed through Codegate File System (CFS), which is a browser API.The available commands are:They are similar to the basic shell commands. Commands such as exec are not implemented, but there are several file operations.When a file is opened, it is managed through file_descriptor_ in the form of a FileBuffer class until Save.A user can invoke the minishell as follows:Callable methods can be bound in the *idl file.In short, one user can have multiple shells and execute each command in one shell.VulnerabilityWe can see the main functionality in mini_shell.cc.However, the vulnerability is pretty simple compared to the file size. The following shows the FileBuffer structure.In here, we can see the fixed-size buffer. Let’s check the part which uses it.There is a size check for the input data vector, but there is no any bound check for idx_ so an out-of-bounds (OOB) read/write occurs.Although the vulnerability is simple, we need to obtain arbitrary address read / write primitives with this relative address read / write, and finally achieve Arbitrary Code Execution.Exploit - AAR/WNow, we have relative read / write primitive of uint64_t size. In fact, there is no difference in the method to achieve arbitrary address read / write.However, in order to access an arbitrary address, we must know the address of the current object. This is because we need to measure the distance to move to the target.There are various ways to leak the address of a controllable object.In this challenge, it is difficult to achieve address leakage with just a simple OOB read because there is no valid address area written anywhere in the heap area. Among them, we tried using brand new technique that can stably leak objects by utilizing the characteristics of Oilpan GC.Oilpan GCThe Heap object of Oilpan GC has the following structure [link].Oilpan GC uses a different allocation method than PartitionAlloc (PA), which is mark-and-sweep and space. Unlike PA, which uses slot-bucket, Oilpan allocates space for the heap and divides (i.e., allocates) the heap object as much as requested size from the space when a request comes in.In other words, without a fixed slot, it dynamically allocates multiple sizes in each space.When they lose their reference and are GC reclaims them, they take the form of FreeList::Entry.When an object in the space is freed, the HeapObject changes to a FreeList::Entry, and additional next_ fields are created to point to the next freed object.Leak IdeaThe idea is as follows:Loop the action below enough times to allocate new spaceSpray shell objectSpray File in each shellTrigger gc()Read the next_ of the header of the next adjacent chunk of FileBuffer in the N-th Sprayed ObjectLeak (N-1)th Sprayed_objectSince each shell has only one File Buffer, N shells are needed to spray N File Buffers.Considering the characteristics of the Oilpan GC described above, consider the following chunk situation.Currently, there is only my object in space. When an object is dynamically divided(i.e., allocated) from space, gc() is executed and the small areas between each object will be treated as Free Entry, forming a FreeList as shown above.We can now read the chained Free Entry by reading temp = sizeof(FileBuffer) + 0x8 from the Sprayed2 object, and leak the Sprayed 1 address through heap_leak = temp - sizeof(FileBuffer)This allows us to leak the address of the object with only spray and out-of-bounds, regardless of how big the distance is between Sprayed 1 and Sprayed 2 whether there is a stable address.Since we have the address of the Sprayed 1 object and the relative address read / write, we can perform arbitrary address read / write.In the exploit, after sufficient spray, it triggers gc() and then leaks objects 90th to 89th.Exploit - Arbitrary Code ExecutionNow, we obtain the arbitrary address read / write primitives.In a typical V8 engine, addrof is used to obtain address of a Wasm RWX Page. However, we only have OOB, and it seems difficult to create an addrof primitive.So what should we do?Overwrite the vtable of HeapMojoRemote to call 0x4141414141414141?The challenge says that it should be exploited on chrome.exe running on Windows 11 24H2. That is, in order to achieve arbitrary function calls in the challenge, CFG Bypass must be accompanied. Of course, considering the huge size of the code base, there may be many gadgets that can bypass CFG.Also, Function::Invoker Chaining, a well-known technique, can bypass CFG.We wanted to find a more stable method, and after auditing the code, we found that there is a LazyInstance Getter for WasmCodePointerObject. We can leak Wasm RWX Page by reading WasmCodePointerTable → entrypoint_.Let's overwrite RWX Page with arbitrary shellcode and execute wasm exports function.In the end, we can stably execute arbitrary shellcode while maintaining persistence. An interesting fact is that the bug of the SBX challenge can be triggered even in the Renderer. However, triggering the vulnerability requires a slight race condition in the SBX Challenge, we are unsure whether UAF Object can be reliably occupied in Blink.

엔키화이트햇

2025. 7. 21.

ClickFix, EtherHidng 기법을 사용하는 ClearFake캠페인 분석

위협 인텔리전스

ClickFix, EtherHidng 기법을 사용하는 ClearFake캠페인 분석

바이러스 토탈 헌팅 기능으로 수집한 자바스크립트 파일을 분석하던 중, 다수의 자바스크립트 파일에서 특정 스마트 컨트랙트 주소가 언급되는 것을 확인하였다. 추가 분석 결과, 해당 스마트 컨트랙트 주소는 ClearFake 캠페인에서 사용하는 EtherHiding 기법과 연관된 것으로 밝혀졌다.ClearFake 캠페인은 EtherHiding과 ClickFix 기법을 활용하여 악성코드를 은폐하고, 다수의 사용자에게 악성코드를 유포하는 정교한 공격이다. EtherHiding 기법은 이더리움 스마트 컨트랙트를 이용하여 악성 행위를 숨기는 기술이고, ClickFix 기법은 사용자 클릭을 유도하여 악성코드를 실행하는 방식이다.본 글에서는 이 두 기법을 활용하여 다수의 사용자에게 악성코드를 유포하는 ClearFake 캠페인 분석 내용을 다룬다.

엔키화이트햇

2025. 7. 16.

ClickFix, EtherHidng 기법을 사용하는 ClearFake캠페인 분석

위협 인텔리전스

ClickFix, EtherHidng 기법을 사용하는 ClearFake캠페인 분석

바이러스 토탈 헌팅 기능으로 수집한 자바스크립트 파일을 분석하던 중, 다수의 자바스크립트 파일에서 특정 스마트 컨트랙트 주소가 언급되는 것을 확인하였다. 추가 분석 결과, 해당 스마트 컨트랙트 주소는 ClearFake 캠페인에서 사용하는 EtherHiding 기법과 연관된 것으로 밝혀졌다.ClearFake 캠페인은 EtherHiding과 ClickFix 기법을 활용하여 악성코드를 은폐하고, 다수의 사용자에게 악성코드를 유포하는 정교한 공격이다. EtherHiding 기법은 이더리움 스마트 컨트랙트를 이용하여 악성 행위를 숨기는 기술이고, ClickFix 기법은 사용자 클릭을 유도하여 악성코드를 실행하는 방식이다.본 글에서는 이 두 기법을 활용하여 다수의 사용자에게 악성코드를 유포하는 ClearFake 캠페인 분석 내용을 다룬다.

엔키화이트햇

2025. 7. 16.

ClickFix, EtherHidng 기법을 사용하는 ClearFake캠페인 분석

위협 인텔리전스

ClickFix, EtherHidng 기법을 사용하는 ClearFake캠페인 분석

바이러스 토탈 헌팅 기능으로 수집한 자바스크립트 파일을 분석하던 중, 다수의 자바스크립트 파일에서 특정 스마트 컨트랙트 주소가 언급되는 것을 확인하였다. 추가 분석 결과, 해당 스마트 컨트랙트 주소는 ClearFake 캠페인에서 사용하는 EtherHiding 기법과 연관된 것으로 밝혀졌다.ClearFake 캠페인은 EtherHiding과 ClickFix 기법을 활용하여 악성코드를 은폐하고, 다수의 사용자에게 악성코드를 유포하는 정교한 공격이다. EtherHiding 기법은 이더리움 스마트 컨트랙트를 이용하여 악성 행위를 숨기는 기술이고, ClickFix 기법은 사용자 클릭을 유도하여 악성코드를 실행하는 방식이다.본 글에서는 이 두 기법을 활용하여 다수의 사용자에게 악성코드를 유포하는 ClearFake 캠페인 분석 내용을 다룬다.

엔키화이트햇

2025. 7. 16.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.