์ง๋ React 18 SSR NUL ๋ฐ์ดํธ ๊ธ ๋์ ๋ค์์ ๋คํธ์ํฌ ์ฐจ๋ก๋ผ๊ณ ์ ์๋ค. ๊ทธ ์ฌ์ด์ ์์ฌ๊ฐ ์๋ค.
2026๋ 10์ 21์ผ Node.js๊ฐ ๋ณด์ ๋ฆด๋ฆฌ์ค๋ฅผ ๋๋คnode-oct2026. ์ด ๊ฑด ์ค ๊ฐ์ฅ ๋์ ๊ฒ์ด ๋ฒ๋ค๋ Brotlirfc7932 ๋์ฝ๋์ ๊ฒฝ๊ณ ๋ฐ ์ฐ๊ธฐ์๋ค. ๊ณต์ง ์ ๋ชฉ์ด ์ด๋ ๋ค.
Node.js Brotli decoder out-of-bounds write permits remote code execution (CVE-2026-111497) - (high)node-oct2026
์ ๋ชฉ๋ง ๋ณด๊ณ ๋ ์ฒซ ์๊ฐ์ ์ด๊ฒ์ด์๋ค.
์ฐ๋ฆฌ๋ brotli ์ ์ฐ๋๋ฐ.
์ฌ ๋ดค๋ค. ์ฒ์ ์ธก์ ์ด ํ๋ ธ๊ณ , ํ๋ฆฐ ๋ฐฉํฅ์ด ํํ ์์ฌํ๋ ์ชฝ์ด์๋ค.
1. ์ฒ์ ์ธก์ : br์ ๋ฌ๋ผ๊ณ ํ์ง ์๋๋ค
๋ก์ปฌ์ ์๋ฒ๋ฅผ ๋์ ๋ค์ด์ค๋ Accept-Encoding์ ๊ทธ๋๋ก ์ฐ์๋ค.
import http from "node:http";
const srv = http.createServer((req, res) => {
console.log(req.url, req.headers["accept-encoding"]);
res.end("ok");
});
srv.listen(0, "127.0.0.1");Node 24.11.1์์ ๋์จ ๊ฐ์ด๋ค.
| ๋ณด๋ด๋ ์ชฝ | Accept-Encoding |
|---|---|
fetch(url) |
gzip, deflate |
http.get(url) |
(ํค๋ ์์) |
br์ด ์๋ค. ์ฌ๊ธฐ์ ๋ฉ์ถ๋ฉด "brotli ๋์ฝ๋๋ ๋ด ์ฝ๋์์ ์ ๋์๊ฐ๋ค"๊ฐ ๋๋ค. ์ค์ ๋ก ๊ทธ๋ ๊ฒ ์ ์ด ๋๋ค๊ฐ ์ง์ ๋ค.
2. ํ๋ฆฐ ์ด์ : ์๋ฒ๋ฅผ http๋ก ๋์ ๋ค
fetch์ ๊ธฐ๋ณธ Accept-Encoding์ ์คํด์ ๋ฐ๋ผ ๊ฐ๋ฆฐ๋ค. Node์ ๋ฒ๋ค๋ undici ์์ค์ ๋ถ๊ธฐ๊ฐ ๊ทธ๋๋ก ์๋คundici-src.
if (!httpRequest.headersList.contains('accept-encoding', true)) {
if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {
httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate, zstd', true)
} else {
httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)
}
}๋ด ํ
์คํธ ์๋ฒ๋ http://127.0.0.1 ์ด์๋ค. ๊ทธ๋์ else ์ชฝ ๊ฐ์ ์ฌ๊ณ ์์๋ค. ์์ฒด ์๋ช
์ธ์ฆ์๋ก https ์๋ฒ๋ฅผ ํ๋ ๋ ๋์ ๊ฐ์ ์ธก์ ์ ๋ค์ ํ๋ค.
| ์์ฒญํ ์คํด | ์๋ฒ๊ฐ ๋ฐ์ Accept-Encoding |
|---|---|
http://127.0.0.1:โฆ |
gzip, deflate |
https://localhost:โฆ |
br, gzip, deflate |
br์ด ๋งจ ์์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ์์๋ฐ์ด๋ ์์ฒญ์ ๊ฑฐ์ ์ ๋ถ https๋ค. ์ฆ ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฐ๋ ์ฝ๋๊ฐ brotli๋ฅผ ๋จผ์ ๋ฌ๋ผ๊ณ ํ๊ณ ์์๋ค.
โ ๏ธ ์ด ๋ถ๊ธฐ๋ Node ๊ณต์ ๋ฌธ์์ ์๋ค.
doc/api์ ์ฒด์์accept-encoding์ด ๋์ค๋ ํ์ผ์zlib.md์http2.md๋๋ฟ์ด๊ณ ,fetch๋ฅผ ๋ค๋ฃจ๋ ๋ฌธ์์๋ ์๋ค. ๋ฒ๋ค๋ undici ์์ค์์๋ง ํ์ธ๋๋ค.
๋ก์ปฌ์์ ์ฌ๋ ๊ฒ์ ์ข์ ์ต๊ด์ด์ง๋ง, ์คํด์ ๋ฐ๊พธ๋ฉด ๊ฐ์ด ๋ฐ๋๋ ์ฝ๋๋ฅผ http๋ก ์ฌ๋ฉด ๋ฐ๋ ๊ฒฐ๋ก ์ด ๋์จ๋ค. ๋ด๊ฐ ๊ฒช์ ๊ฒ์ด ์ ํํ ๊ทธ๊ฒ์ด๋ค.
3. ๊ทธ๋ฆฌ๊ณ ์ ๋ฌ๋ผ๊ณ ํด๋ ํผ๋ค
๋ ์ค์ํ ์ชฝ์ด ๋จ์ ์๋ค. HTTP์์ Accept-Encoding์ ์์ฒญ์ด๊ณ rfc9110-accept-encoding Content-Encoding์ ํต๋ณด๋คrfc9110-content-encoding. ์๋ฒ๊ฐ ๋ด๊ฐ ์ ์ด ๋ณด๋ธ ๋ชฉ๋ก์ ์งํฌ ์๋ฌด๋ ๋ช
์ธ์ ์๋ค.
๋ฌป์ง ์๊ณ ๋ brotli๋ก ๋ตํ๋ ์๋ฒ๋ฅผ ์ธ์ ๋ค ๊ฐ์ง๋ก ๋๋ฌ ๋ดค๋ค.
// ์์ฒญ์ ๋ญ๊ฐ ์ ํ ์๋ ๋ brotli ๋ก ๋ตํ๋ค
const body = zlib.brotliCompressSync(Buffer.from("ํ๋ ธ๋ค", "utf8"));
res.writeHead(200, { "content-encoding": "br" });
res.end(body);| ์์ฒญ์ ์ ์ ๊ฒ | ๊ฒฐ๊ณผ |
|---|---|
| ์๋ฌด๊ฒ๋ ์ ์ ๋๋ค (๊ธฐ๋ณธ) | ํ์ด์ ์ค๋ค |
gzip ๋ง ๋ฌ๋ผ๊ณ ํ๋ค |
ํ์ด์ ์ค๋ค |
identity (์์ถํ์ง ๋ง๋ผ) |
ํ์ด์ ์ค๋ค |
gzip, br;q=0 (br์ ๊ฑฐ์ ํ๋ค) |
ํ์ด์ ์ค๋ค |
๋ค ๊ฒฝ์ฐ ์ ๋ถ await r.text()๊ฐ "ํ๋ ธ๋ค"๋ฅผ ๋๋ ค์คฌ๋ค. ์์ถ์ ์ฐ์ง ๋ง๋ผ๊ณ ๋ช
์ํด๋ ๋์ฝ๋๊ฐ ๋์๋ค.
์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ค๊ณ๋ค. ํด๋ผ์ด์ธํธ๋ ๋ฐ์ ์๋ต์ ์ ํ ๋๋ก ํผ๋คundici. ์ ํ ๋๋ก ์ ํ๋ฉด ๋ณธ๋ฌธ์ ์ฝ์ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ทธ๋์ Accept-Encoding์ ๋ฐฉ์ด๊ฐ ์๋๋ค
Accept-Encoding์ ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ ๋ ์นธ์ด๋ค- ๋ฌด์์ด ๋์์ฌ์ง๋ ์๋๊ฐ ๊ณ ๋ฅธ๋ค
- ๋์ฝ๋์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํธ๋ ์ ๋ถ ์๋๊ฐ ๋ง๋ ๊ฒ์ด๋ค
์์ถ์ ์ ์ฐ๊ธฐ๋ก ์ ํ๋ค๊ณ ์์ถ ํด์ ์ฝ๋๊ฐ ์ ๋๋ ๊ฒ์ด ์๋๋ค. ์์ถ ํด์ ๋ ์๋ต์ ๋ฐ๋ ์ชฝ์์ ์ผ์ด๋๊ณ , ๊ทธ ์ ๋ ฅ์ ์ฒ์๋ถํฐ ๋๊น์ง ์๋ ๊ฒ์ด๋ค. ๊ฑฐ๊ธฐ๊ฐ ์ ๋ขฐ ๊ฒฝ๊ณ๋ค.
์ฃผํฉ์ ์นธ์ ์ ๋ ฅ์ ๋ด ํ๋ก์ธ์ค ์์ ์์ง๋ง ๋ด๊ฐ ๋ง๋ ๊ฒ์ด ์๋๋ค. ๋ด๊ฐ ์์ฒญ์ ๋ฌด์์ ์ ์๋์ง๋ ๊ทธ ์นธ์ ๋ค์ด์ค๋ ๋ฐ์ดํธ๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ๋ค.
4. ๋ฌด์์ด ์ด๋ป๊ฒ ๊นจ์ก๋
Node ๊ณต์ง๊ฐ ์ ์ ์์ธ์ด ์งง๊ณ ๋ถ๋ช ํ๋ค.
An invalid block switch was reported as a temporary need for more input instead of a permanent format error, so the streaming decoder kept appending input bytes to an eight-byte internal buffer.node-oct2026
์๋ชป๋ ๋ธ๋ก ์ ํ์ ์๊ตฌ ํ์ ์ค๋ฅ๋ก ๋ณด๊ณ ํด์ผ ํ๋๋ฐ ์ ๋ ฅ์ด ๋ ํ์ํ๋ค๋ก ๋ณด๊ณ ํ๋ค. ๊ทธ๋์ ์คํธ๋ฆฌ๋ฐ ๋์ฝ๋๊ฐ 8๋ฐ์ดํธ ๋ด๋ถ ๋ฒํผ์ ์ ๋ ฅ์ ๊ณ์ ์ด์ด ๋ถ์๋ค. ์ง์ ๋ ๋ถ๋ฅ๊ฐ ๋์ธ ๊ฒ๋ ์ด๊ฒ๊ณผ ๋ง๋ฌผ๋ฆฐ๋ค. ๊ฒฝ๊ณ ๋ฐ ์ฐ๊ธฐ(CWE-787)์ ๋ฐํ๊ฐ ํ์ธ ๋๋ฝ(CWE-252)์ด๋คcve-record.
Brotli ์ชฝ ์์ ์ปค๋ฐ ์ ๋ชฉ์ด "Detect and report invalid stream earlier"๋คbrotli-commit. ์ฌ๋ฌ ํจ์์ ๋ฐํํ์ด ์ฐธ๊ฑฐ์ง์์ ์ค๋ฅ ์ฝ๋๋ก ๋ฐ๋์๋ค. ์ฐธ๊ฑฐ์ง์ผ๋ก๋ "์คํจ"์ "์์ง ๋ชจ์๋"์ ๊ตฌ๋ณํ ์ ์์๋ค๋ ๋ป์ด๋ค.
์ฌ๊ฐ๋๊ฐ ๊ธฐ๊ด๋ง๋ค ๋ค๋ฅด๋ค
| ๊ธฐ๊ด | ๋ฑ๊ธ |
|---|---|
| Node.js | high (CVSS ๋ฒกํฐ, ์ ์๋ฅผ ๊ณต์ง์ ์ ์ง ์์๋ค)node-oct2026 |
| CVE ๋ ์ฝ๋ (Google) | CVSS 4.0 9.2 Criticalcve-record |
| NVD | CVSS 3.1 9.8 Criticalnvd |
์ธ ์ซ์๊ฐ ๋ค ์๋ฌธ์ด๋ค. ํ์ชฝ๋ง ์ธ์ฉํ๋ฉด ๊ธ์ด ํ๋ฆฌ์ง๋ ์์๋ ์ข์์ง๋ค.
5. ์์๋ฐ์ด๋ ์์ฒญ์ด ์์ผ๋ฉด ์ด๋ฏธ ๋ฌผ๋ ค๋ฐ์๋ค
์ด ๋์ฝ๋๋ ๋ฐํ์์ ๋ฒ๋ค๋์ด ์๋ค(deps/brotli)node-deps. ๋ด๊ฐ ์ค์นํ์ง ์์๊ณ package.json์๋ ์๊ณ ์์กด์ฑ ๋ชฉ๋ก์ ๋ค์ ธ๋ ์ ๋์จ๋ค.
๋ฟ๋ ์ฝ๋๋ ๋๋ค.
| ํํ ์ฝ๋ | ์ ๋ฟ๋ |
|---|---|
| ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๋ฉํ๋ฐ์ดํฐ ์์ง | ์ฌ์ฉ์๊ฐ ๋ฃ์ URL์ ๊ฐ์ ธ์ ๋ณธ๋ฌธ์ ์ฝ๋๋ค |
| ์นํ ๊ฒ์ฆ, ์ฝ๋ฐฑ ํ์ธ | ์๋ ์๋ฒ์ ์๋ต์ ์ฝ๋๋ค |
| ํฌ๋กค๋ฌ, ์ฌ์ดํธ๋งต ์์ฑ๊ธฐ | ์์ ์ฃผ์๋ฅผ ์ด์ด ๋ณธ๋ฌธ์ ํ๋๋ค |
| ์ธ๋ถ API ์ฐ๋ | ๊ทธ API๊ฐ ๋ซ๋ฆฌ๊ฑฐ๋ ์ค๊ฐ์ด ๋ผ๋ฉด ์๋ต์ด ๋ฐ๋๋ค |
| ์ด๋ฏธ์ง, ํ์ผ ๋ด๋ ค๋ฐ๊ธฐ | ๊ฐ์ ๊ธธ์ ์ด๋ค |
๋ง์ง๋ง ์ค์ด ์ค์ํ๋ค. ์๋๊ฐ ๋ด ์ ์ด ์๋์ด๋ ๋๋ค. ์๋๊ฐ ๋นํ๋ฉด ๋ด ๋์ฝ๋์ ๊ทธ ๋ฐ์ดํธ๊ฐ ๋ค์ด์จ๋ค.
node:zlib์ ๊ณต๊ฐ API๋ก๋ ๋ฐ๋ก ๋ฟ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต์ zlib ๋ฌธ์๊ฐ ๊ถํ๋ HTTP ํด๋ผ์ด์ธํธ ์์๊ฐ Accept-Encoding: br,gzip,deflate,zstd๋ก ์์ฒญํด์ case 'br'์์ createBrotliDecompress()๋ก ๋ฐ๋ ๋ชจ์์ด๋คnode-zlib. ๋ฌธ์๊ฐ ๊ฐ๋ฅด์น๋ ํจํด์ด ๊ทธ๋๋ก ๊ทธ ๊ฒฝ๋ก๋ค.
SSRF ๊ฐ๋๊ฐ ์ด๊ฒ์ ๋ง์ ์ฃผ์ง ์๋๋ค
| SSRF ๊ฐ๋ | ์๋ต ๋์ฝ๋ฉ | |
|---|---|---|
| ์ฌ๋ ๊ฒ | ์ด๋๋ก ๊ฐ๋ (ํธ์คํธ, IP ๋์ญ) | ๋ฌด์์ด ๋์์ค๋ (๋ณธ๋ฌธ ๋ฐ์ดํธ) |
| ๋ง๋ ๊ฒ | ๋ด๋ถ๋ง, ๋ฉํ๋ฐ์ดํฐ ๋์ owasp-ssrf | (์๋ฌด๊ฒ๋) |
๊ณต๊ฐ ์ธํฐ๋ท ์ฃผ์๋ก๋ง ๋๊ฐ๋๋ก ์๋ฒฝํ ๋ง์๋, ๊ทธ ๊ณต๊ฐ ์ฃผ์๊ฐ ๋๋ ค์ฃผ๋ ๋ฐ์ดํธ๋ ๊ทธ๋๋ก ๋์ฝ๋์ ๋ค์ด๊ฐ๋ค. ๋ ๊ฒ์ฌ๋ ๋ค๋ฅธ ์ถ์ด๋ผ ํ๋๊ฐ ๋ค๋ฅธ ํ๋๋ฅผ ๋์ ํ์ง ๋ชปํ๋ค.
๋ง๋ถ์ฌ, ๋ง์ SSRF ๊ฐ๋๊ฐ ์์ ์ฃผ์๋ง ๋ณด๊ณ ๊ทธ ๋ค ๋ฆฌ๋ค์ด๋ ํธ์ ์ฐ๊ฒฐ ์์ ์ DNS ์ฌํด์์ ๋ค์ ์ ๋ณธ๋ค. ๊ฐ๋๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด ์ด๊ฒ๋ ๊ฐ์ด ๋ณด๋ ํธ์ด ์ข๋ค.
6. ๊ณ ์น๋ ๊ธธ์ ๋ฐํ์ ํ๋ฟ์ด๋ค
| ์ค | ๊ณ ์ณ์ง ํnode-oct2026 |
|---|---|
| 26.x | 26.12.1 |
| 24.x | 24.22.1 |
| 22.x | 22.23.4 |
๐ ๋ฒ๋ค๋ brotli ํ ๋ฒํธ๋ก ํ์ ํ๋ฉด ํ๋ฆฐ๋ค. Node๋ brotli ๋ฒ์ ์ ์ฌ๋ฆฌ์ง ์๊ณ ํจ์น๋ง ์ญ์ด์ํ๋ค. ์ทจ์ฝํ v26.12.0๊ณผ ๊ณ ์ณ์ง v26.12.1์ deps/brotli/c/common/version.h๊ฐ ๋ ๋ค 1.2.0์ด๋คnode-deps. Brotli ๊ณต์ ์์ ํ์ 1.0.10 / 1.1.1 / 1.2.1์ธ๋ฐbrotli-releases Node๋ ๊ทธ ๋ฒํธ๋ก ๊ฐ์ง ์๋๋ค. ํ์ ๊ธฐ์ค์ Node ํ ๋ฒํธ๋ฟ์ด๋ค.
ํ์ ํ์ธํ๋ค.
node --version # ๋ด ๋ก์ปฌ๋ก์ปฌ ํ๊ณผ ์ค์ ๋ก ๋๋ ํ์ ๋ค๋ฅด๋ค. ์ ์ธํ ์๋ฆฌ๋ฅผ ๋ฐ๋ก ๋ด์ผ ํ๋ค.
grep -rn "FROM node:" --include=Dockerfile .
grep -rn "node-version" .github/workflows/
grep -rn "NODE_VERSION" render.yaml vercel.json 2>/dev/null
cat .nvmrc .node-version 2>/dev/null
grep -rn '"node"' package.json # engines.node์ด ๋ช
๋ น๋ค์ ๋ด ํ๋ก์ ํธ์ ๋๋ ค ๋ณด๊ณ ์๊ฒ ๋ ๊ฒ์, ํ์ด ์ ํ ์์ง ์์ ์๋ฆฌ๊ฐ ๊ฐ์ฅ ๋ง๋ค๋ ๊ฒ์ด์๋ค. engines.node๋ .nvmrc๋ ์์ผ๋ฉด ๋น๋ํ๋ ์ชฝ์ด ์๊ธฐ ๊ธฐ๋ณธ๊ฐ์ ์ด๋ค. ๊ทธ๋ฌ๋ฉด "์ด๋ ํ์ผ๋ก ๋๋๊ฐ"์ ๋ตํ ๋ฐฉ๋ฒ์ด ์๊ณ , ๋ตํ ์ ์๋ ๊ฒ์ ์ฌ๋ ธ๋์ง๋ ํ์ธํ ์ ์๋ค.
์ง์์ด ๋๋ ์ค์ ๊ณ ์นจ์ด ์ ์จ๋ค
| ์ค | ์ง์ ์ข ๋ฃnode-schedule |
|---|---|
| 20.x Iron | 2026-04-30 |
| 23.x | 2025-06-01 |
| 25.x | 2026-06-01 |
Node ๊ณต์ง๊ฐ ํ ๋ฌธ์ฅ์ผ๋ก ์ ์ด ๋๋ค.
It's important to note that End-of-Life versions are always affected when a security release occurs.node-oct2026
โ ๏ธ ์ง์์ด ๋๋ ์ค์ ใ์์ง ์ ์ฌ๋ ธ๋คใ๊ฐ ์๋๋ผ ใ์์ผ๋ก๋ ์ ๊ณ ์ณ์ง๋คใ๋ค. ํ์ ์ฌ๋ฆฌ๋ ๊ฒ๊ณผ ์ค์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ค๋ฅธ ์ผ์ด๋ผ ๋ฐ๋ก ์ ์ด ๋๋ ํธ์ด ๋ซ๋ค.
์ฌ๊ธฐ์ ํจ์ ํ๋. ๊ณต์ "Previous Releases" ํ์ ๋ง์ง๋ง ์นธ์ "Last updated"์ด๊ณ ์ง์ ์ข ๋ฃ ๋ ์ง๊ฐ ์๋๋ค. ๊ทธ ํ๋ง ๋ณด๋ฉด ํ์ญ LTS๊ฐ ๊ณง ๋๋๋ ๊ฒ์ฒ๋ผ ์ฝํ๋ค. ์ข ๋ฃ ๋ ์ง๋ ๋ฆด๋ฆฌ์ค ์ผ์ ํ์ผ์ ๋ด์ผ ํ๋คnode-schedule.
7. ์ ์ฉ ์ฌ๋ถ๋ ์ถ์ฒ์ ๋ฐ๋ผ ๋ง์ด ๋ค๋ฅด๋ค
| ์ถ์ฒ | ๋ฌด์์ ๋งํ๋ |
|---|---|
| Node.js | ์๋ฌด ๋ง ์ ํ๋ค. 10-21 ๊ณต์ง์ ์ ์ฉ, PoC ์ธ๊ธ์ด ์๋คnode-oct2026 |
| CISA | 2026-10-27 ์ ์ฉ๋ ์ทจ์ฝ์ ๋ชฉ๋ก์ ์ฌ๋ ธ๋ค. ์ฐ๋ฐฉ๊ธฐ๊ด ๊ธฐํ 2026-11-10cisa-kev |
CISA๊ฐ ๊ทธ ๋ชฉ๋ก์ ์ฌ๋ฆฌ๋ ๊ธฐ์ค ์์ฒด๊ฐ ์ ์ฉ ์ฆ๊ฑฐ๋ค. ๊ทธ๋ฌ๋ ๋์ ๊ฐ์ด ์ ๋ ํธ์ด ์ ํํ๋ค. ๋ฒค๋ ๋ธ๋ก๊ทธ์๋ ์ค์ ๋ก ์ ธ์ ์ป์๋ค๋ ์ฃผ์ฅ์ด ์๊ณ , ๋ฐ๋๋ก ๊ตฌ์กฐ์ ์ฝ๋ ์คํ๊น์ง๋ ๋๋ฌํ์ง ๋ชปํ๋ค๋ ๋ถ์๋ ์๋ค. ๋์ด ์ถฉ๋ํ๋ฏ๋ก ์ฌ๊ธฐ์๋ ๋จ์ ํ์ง ์๋๋ค. Node ์์ ์ ํํ์ "can lead to a crash, disclosure of process memory, or remote code execution"์ด๋คnode-oct2026.
๊ทธ๋ฆฌ๊ณ 11์ 11์ผ์ ๋ค์ ๋ณด์ ๋ฆด๋ฆฌ์ค๊ฐ ์๊ณ ๋ผ ์๋ค. ์ฌ์ ๊ณต์ง์ CVE ๋ชฉ๋ก์ ์์ง ๋น์ด ์๊ณ ์ต๊ณ ์ฌ๊ฐ๋๊ฐ HIGH๋ผ๊ณ ๋ง ์ ํ ์๋คnode-nov2026.
8. ๊ฐ์ด ๋์จ ๊ฒ๋ค์ด ๊ฐ์ ์ถ์ด๋ค
๊ทธ ๋ฆด๋ฆฌ์ค์ ๋ค๋ฅธ ๊ณ ์นจ๋ค์ ๋ฌถ์ด ๋ณด๋ฉด ์ ๋ถ ๋ค์ด์ค๋ ๊ฒ์ ํด์ํ๋ ์๋ฆฌ๋ค.
| ์๋ฆฌ | ํด์ํ๋ ๊ฒ | ์ ๋ ฅ์ ๊ณ ๋ฅด๋ ์ชฝ |
|---|---|---|
| ์์ถ ํด์ | ์๋ต ๋ณธ๋ฌธ | ์๋ ์๋ฒ |
| DNS ์ด๋ฆ ์ฒ๋ฆฌ (NUL ๊ธ์๋ก ์๋ฆผ) | ์ด๋ฆ ์๋ต | DNS ์๋ต์ |
| TLS ํธ์คํธ์ด๋ฆ ํ์ธ (์ธ ๊ฑด) | ์ธ์ฆ์์ ์ด๋ฆ | ์ธ์ฆ์ ์ ์์ |
TLS ํธ์คํธ์ด๋ฆ ์ชฝ์ ์ ๊ฐ ์ซ์๋ก ์ด IP, ๋์จํ๊ฒ IP๋ก ํด์๋๋ ํธ์คํธ, ๋น์ ๊ท IPv4 ํธ์คํธ์ด๋ฆ๊น์ง ์ธ ๊ฑด์ด๋คnode-oct2026. ๊ฐ์ ์ฃผ์ PHP ์ชฝ์๋ ์๊ฒฉ ์ฝ๋ ์คํ์ด ์์๊ณ ๊ฑฐ๊ธฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ์๋๋ผ ๋ฐํ์์ด ํ์ ์ฒ๋ฆฌ๊ธฐ ์ชฝ์ด์๋ค.
์ฝํ๋ ๊ตํ์ ํ๋๋ค. ๊ณต๊ฒฉ๋ฉด์ ์
๋ ๋ด๊ฐ importํ ๊ฒ๋ง ์ธ๋ฉด ๋ฐํ์์ด ๋์ ๋ค๊ณ ์๋ ํ์์ ๋์ฝ๋๊ฐ ํต์งธ๋ก ๋น ์ง๋ค. ๊ทธ๊ฒ๋ค์ ์์กด์ฑ ๋ชฉ๋ก์ ์๊ณ , ๋ด๊ฐ ์ฐ๊ธฐ๋ก ์ ํ ์ ๋ ์๊ณ , ๋๋ ์ค์์น๋ ์๋ค.
9. ์ค๋ฌด ์ฒดํฌ๋ฆฌ์คํธ
- ๋๋ ํ์ ์๋ค. ๋ก์ปฌ(
node --version)๊ณผ ๋น๋, ๋ฐฐํฌ ์ชฝ์ ๋ฐ๋ก ํ์ธํ๋ค. ๋์ ๊ฑฐ์ ๋ ๋ค๋ฅด๋ค - ํ์ ์ ์ธํด ๋๋ค.
engines.node๋๋.nvmrc. ์์ผ๋ฉด ๋น๋ํ๋ ์ชฝ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๊ณ , ๊ทธ๋ฌ๋ฉด ์ฌ๋ ธ๋์ง ํ์ธํ ๋ฐฉ๋ฒ์ด ์๋ค - ๋ฒ๋ค๋ ์์กด์ฑ ํ ๋ฒํธ๋ก ํ์ ํ์ง ์๋๋ค. ๋ฐํ์์ด ๋ฒํธ๋ฅผ ์ฌ๋ฆฌ์ง ์๊ณ ํจ์น๋ง ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ธฐ์ค์ ๋ฐํ์ ํ ๋ฒํธ๋ค
- ์ง์์ด ๋๋ ์ค์ ์ฐ๊ณ ์๋์ง ์ผ๋ค. ๋๋ ์ค์ ๊ณ ์นจ์ด ์ ์จ๋ค. "์ฌ๋ฆด ๊ฒ"์ด ์๋๋ผ "์ค์ ๋ฐ๊ฟ ๊ฒ"์ผ๋ก ์ ๋๋ค
- ์์๋ฐ์ด๋ ์์ฒญ์ด ์๋ ์๋ฆฌ๋ฅผ ์ ์ด ๋๋ค. ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์นํ ๊ฒ์ฆ, ํฌ๋กค๋ฌ, ํ์ผ ๋ด๋ ค๋ฐ๊ธฐ, ์ธ๋ถ API. ์ ๋ถ ์๋๊ฐ ๋ง๋ ๋ฐ์ดํธ๋ฅผ ํด์ํ๋ค
- SSRF ๊ฐ๋๋ฅผ "๋ฌด์์ด ๋์์ค๋"์ ๋ฐฉ์ด๋ก ์ธ์ง ์๋๋ค. ๋ค๋ฅธ ์ถ์ด๋ค. ๊ฐ๋๊ฐ ์์ด๋ ๋์ฝ๋๋ ๊ทธ๋๋ก ๋๋ค
- ๋ก์ปฌ์์ ์ด ๋ ์คํด์ ๋ง์ถ๋ค. ๊ธฐ๋ณธ๊ฐ์ด http์ https์์ ๊ฐ๋ฆฌ๋ ์ฝ๋๊ฐ ์๋ค. ์ค์ ๋ก ์ฐ๋ ์คํด์ผ๋ก ์ฌ์ผ ํ๋ค
ํ ์ค๋ก
Accept-Encoding์ ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ ๋ ์นธ์ด๊ณ , ๋ฌด์์ด ๋์์ฌ์ง๋ ์๋๊ฐ ๊ณ ๋ฅธ๋ค. ๊ทธ ์ฌ์ด์ ์์ถ ํด์ ๊ธฐ๊ฐ ์๋ค.
๋ค์ ๊ธ์์๋
๋ค์ ๋ณด์ ์ฐจ๋ก์๋ HTTP ๋ณด์ ํค๋ ๊ธ์์ ์๊ณ ํ CSP Report-Only ํธ์ ์ด๋ค. ๋ณด๊ณ ๋ง ๋ฐ๊ณ ๋ง์ง ์๋ ๋ชจ๋๋ก ์ ์ฑ ์ ์ฌ๋ ๋ฐฉ๋ฒ๊ณผ, ๊ทธ ๋ณด๊ณ ์๊ฐ ์ค์ ๋ก ๋ฌด์์ ์๋ ค ์ฃผ๋์ง ๋ค๋ฃฌ๋ค.
์ฐธ๊ณ ๋ฌธํ
๊ด๋ จ ๊ธ
- ํ๊ธ ์์ ์จ์ NUL ๋ฐ์ดํธ: React 18 ์คํธ๋ฆฌ๋ฐ SSR์ด ํ๊ทธ ๋งํฌ๋ฅผ ๊นจ๋จ๋ฆฐ ๊ณผ์
- HTTP ๋ณด์ ํค๋ ์ ๊ฒ: ๋ด ๋ธ๋ก๊ทธ ์๋ต์๋ HSTS ํ๋๋ง ๋ถ์ด ์์๋ค
- DNS ์์ ์ ๋ณต โ ๋๋ฉ์ธ์ด IP๋ก ๋ฐ๋๊ธฐ๊น์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฌ์ด์ ๋ณด์
- Node.js. "Wednesday, October 21, 2026 Security Releases" (CVE 10๊ฑด์ ์ ๋ชฉ๊ณผ ์ฌ๊ฐ๋, ์ํฅ ๋ผ์ธ, ๊ณ ์ณ์ง ํ, End-of-Life ํ ๊ด๋ จ ๋ฌธ์ฅ). https://nodejs.org/en/blog/vulnerability/october-2026-security-releasesโฉ
- IETF. "RFC 7932 - Brotli Compressed Data Format". https://www.rfc-editor.org/rfc/rfc7932โฉ
- nodejs/node.
deps/undici/src/lib/web/fetch/index.js(์คํด์ ๋ฐ๋ผ ๊ธฐ๋ณธaccept-encoding์ ๊ฐ๋ฅด๋ ๋ถ๊ธฐ). https://github.com/nodejs/node/blob/v26.12.1/deps/undici/src/lib/web/fetch/index.jsโฉ - IETF. "RFC 9110 - HTTP Semantics, 12.5.3. Accept-Encoding" (์์ฒญ์ ์ ๋ ์ ํธ). https://www.rfc-editor.org/rfc/rfc9110#field.accept-encodingโฉ
- IETF. "RFC 9110 - HTTP Semantics, 8.4. Content-Encoding" (ํํ์ ์ ์ฉ๋ ์ธ์ฝ๋ฉ์ ์๋ฆฌ๋ ํ๋). https://www.rfc-editor.org/rfc/rfc9110#field.content-encodingโฉ
- nodejs/undici. Node.js์
fetch๊ตฌํ. ์๋ต์Content-Encoding์ ๋ฐ๋ผ ๋ณธ๋ฌธ์ ํผ๋ค. https://github.com/nodejs/undiciโฉ - CVE Program. "CVE-2026-111497 - Out-of-Bounds Write in Google Brotli Decoder" (CNA Google, CVSS 4.0 9.2, CWE-787 + CWE-252). https://www.cve.org/CVERecord?id=CVE-2026-111497โฉ
- google/brotli. "Detect and report invalid stream earlier." (
c/dec/decode.c์์ ์ปค๋ฐ). https://github.com/google/brotli/commit/0ed4268a4401abcb4472096340477cf4af7d1a2bโฉ - NVD. "CVE-2026-111497 Detail" (CVSS 3.1 9.8 Critical). https://nvd.nist.gov/vuln/detail/CVE-2026-111497โฉ
- nodejs/node.
deps/brotli(๋ฒ๋ค๋ Brotli ์์ค. ์์ ํ๊ณผ ์ทจ์ฝ ํ์c/common/version.h๊ฐ ๊ฐ๋ค). https://github.com/nodejs/node/tree/v26.12.1/deps/brotliโฉ - Node.js. "zlib - Compression and decompression" (
brotliDecompress,createBrotliDecompress, ๊ทธ๋ฆฌ๊ณAccept-Encoding์ ๋ณด๋ด๊ณcase 'br'๋ก ๋ฐ๋ HTTP ํด๋ผ์ด์ธํธ ์์). https://nodejs.org/docs/latest-v26.x/api/zlib.htmlโฉ - OWASP. "Server Side Request Forgery Prevention Cheat Sheet" (๋ชฉ์ ์ง ๊ฒ์ฆ ์ค์ฌ์ ๋ฐฉ์ด). https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.htmlโฉ
- google/brotli. Releases v1.0.10 / v1.1.1 / v1.2.1 (๋ฆด๋ฆฌ์ค ๋ ธํธ SECURITY ํญ๋ชฉ). https://github.com/google/brotli/releases/tag/v1.2.1โฉ
- nodejs/Release.
schedule.json(๊ฐ ๋ฆด๋ฆฌ์ค ์ค์ start, maintenance, end ๋ ์ง). https://raw.githubusercontent.com/nodejs/Release/main/schedule.jsonโฉ - CISA. "Known Exploited Vulnerabilities Catalog" (Google Brotli Unchecked Return Value Vulnerability, dateAdded 2026-10-27, dueDate 2026-11-10). https://www.cisa.gov/known-exploited-vulnerabilities-catalogโฉ
- Node.js. "Wednesday, November 11, 2026 Security Releases" (์ฌ์ ๊ณต์ง. ์ต๊ณ ์ฌ๊ฐ๋ HIGH, CVE ๋ชฉ๋ก ๋ฏธ๊ธฐ์ฌ). https://nodejs.org/en/blog/vulnerability/november-2026-security-releasesโฉ




