[BE] Go 1.26.4 / 1.25.11 보안 패치 — crypto/x509·mime·net/textproto 3종 취약점 수정
서론
2026년 6월 2일, Go 언어 팀이 Go 1.26.4와 Go 1.25.11을 동시에 릴리스했다. 이번 릴리스는 세 가지 보안 취약점 수정을 포함한 보안 패치 릴리스로, 표준 라이브러리의 핵심 패키지인 crypto/x509, mime, net/textproto에서 각각 한 건씩 CVE가 수정됐다.
세 취약점 모두 서비스 거부(DoS) 또는 정보 노출 유형이며, 인증 없이 공격자가 원격에서 트리거할 수 있는 조건이라는 점에서 주의가 필요하다. 특히 crypto/x509의 이차 복잡도 문제(CVE-2026-27145)와 mime의 CPU 폭주 문제(CVE-2026-42504)는 외부에서 입력을 받는 서버 환경에서 실질적인 위협이 된다.
Go 생태계는 마이크로서비스, API 서버, CLI 툴, 쿠버네티스 컨트롤러 등 다양한 백엔드 인프라에 광범위하게 사용되고 있다. 표준 라이브러리의 보안 패치가 나왔다면 실 서비스에 영향을 미칠 수 있는 버전인지 확인하고 업그레이드하는 것이 기본 원칙이다.
이번 글에서는 세 CVE의 기술적 세부 내용과 영향 범위, 그리고 업그레이드 방법을 정리한다.
본론
릴리스 개요
Go의 보안 릴리스 정책에 따르면, 최신 두 개 마이너 버전(1.26.x, 1.25.x)이 공식 지원 범위에 있다. 이번 릴리스는 두 라인 모두에 동일한 보안 수정을 적용한 것이다.
| 릴리스 | 출시일 | 포함 내용 |
|---|---|---|
| Go 1.26.4 | 2026-06-02 | 3건 보안 수정 + 컴파일러·런타임·명령어 버그 수정 |
| Go 1.25.11 | 2026-06-02 | 3건 보안 수정 + 컴파일러·런타임 버그 수정 |
두 릴리스 모두 pkg.go.dev/vuln에 등록된 공식 취약점 데이터베이스 항목(GO-2026-5037, GO-2026-5038, GO-2026-5039)에 대응한다.
CVE-2026-27145 — crypto/x509 인증서 검증 이차 복잡도 DoS
취약점 ID: CVE-2026-27145 / GO-2026-5037 공개일: 2026년 6월 2일 심각도: 중간 ~ 높음 (서비스 가용성 영향)
기술적 원인
이 취약점은 crypto/x509 패키지의 VerifyHostname 함수에서 발생한다. 내부적으로 이 함수는 HostnameError.Error() 메서드를 통해 오류 문자열을 생성하는데, 이 과정에서 두 가지 문제가 복합적으로 작용한다.
문제 1: 반복 문자열 연결의 O(n²) 복잡도
1
2
3
4
5
// 문제가 있는 기존 패턴 (개념 설명용)
var s string
for _, name := range cert.DNSNames {
s += name + ", " // 반복 연결 → O(n²) 메모리 할당
}
Go에서 문자열은 불변(immutable)이므로 +=로 반복 연결하면 매 반복마다 새 문자열을 할당한다. SAN(Subject Alternative Name) 항목 수가 n이면 총 메모리 연산이 O(n²)가 된다.
문제 2: SAN 항목 수 제한 부재
matchHostnames 함수가 인증서의 모든 DNS SAN 항목을 순회하면서 대상 호스트명과 비교하는데, 반복 횟수에 상한이 없다. 공격자가 매우 많은 수의 SAN 항목이 포함된 인증서를 제출하면 서버 CPU와 메모리를 고갈시킬 수 있다.
1
2
3
4
5
[공격 시나리오]
1. 공격자가 수만 개의 DNS SAN 항목이 포함된 인증서를 생성
2. 해당 인증서를 mTLS(상호 TLS 인증) 또는 클라이언트 인증서 검증
엔드포인트에 제출
3. VerifyHostname 호출 시 O(n²) 연산 → CPU 폭주 → 서버 응답 불가
영향 범위: mTLS를 구현한 서버, 클라이언트 인증서를 직접 검증하는 Go 서버, TLS 설정에서 VerifyPeerCertificate 또는 유사 콜백을 사용하는 서비스.
수정된 버전에서는 strings.Builder를 사용해 문자열 연결의 이차 복잡도를 선형(O(n))으로 줄이고, SAN 항목 수에 대한 상한을 도입했다.
CVE-2026-42504 — mime MIME 헤더 DoS
취약점 ID: CVE-2026-42504 / GO-2026-5038 공개일: 2026년 6월 2일 심각도: 중간 ~ 높음 (서비스 가용성 영향)
기술적 원인
mime 패키지는 MIME 인코딩 헤더를 파싱하는 기능을 제공한다. RFC 2047에 정의된 encoded-word 형식(=?charset?encoding?text?=)을 디코딩할 때, 유효하지 않은 encoded-word가 대량으로 포함된 헤더를 처리하면 CPU가 과도하게 소비된다.
1
2
3
4
5
[정상 MIME 헤더 예시]
From: =?UTF-8?Q?John_Smith?= <john@example.com>
[악의적 입력 예시]
From: =?=?=?=?=?=?=?= ... (수천 개의 잘못된 encoded-word 반복)
공격자는 이메일 수신 서버, 멀티파트 HTTP 요청 처리 서버, 또는 MIME 헤더를 파싱하는 어떤 서비스에든 조작된 입력을 전송해 CPU를 고갈시킬 수 있다.
영향 범위: mime 또는 net/mail, mime/multipart 패키지를 사용하는 서비스. 특히 이메일 처리 서버, 파일 업로드 API, 멀티파트 폼 처리 엔드포인트.
Go에서 net/http의 멀티파트 파싱은 내부적으로 mime 패키지를 사용하므로, 파일 업로드나 폼 제출을 받는 API 서버는 이 취약점의 영향권에 있다. 다만 net/http의 기본 파싱 흐름에서 이 코드 경로가 트리거되는지는 구체적인 서버 구현에 따라 다르다.
수정된 버전에서는 유효하지 않은 encoded-word에 대한 처리 로직을 개선해 반복 파싱 시 CPU 소비를 제한했다.
CVE-2026-42507 — net/textproto 오류 문자열 정보 노출
취약점 ID: CVE-2026-42507 / GO-2026-5039 공개일: 2026년 6월 2일 심각도: 낮음 ~ 중간 (정보 노출)
기술적 원인
net/textproto 패키지는 텍스트 기반 네트워크 프로토콜(HTTP, SMTP, NNTP 등)의 헤더 파싱을 담당한다. 이 패키지의 여러 함수가 오류를 반환할 때, 입력값을 이스케이프 없이 오류 메시지에 포함시킨다.
1
2
3
4
// 문제가 있는 패턴 (개념 설명용)
return fmt.Errorf("invalid header: %s", userInput)
// userInput이 이스케이프되지 않으면 로그/출력에서 오해를 유발하거나
// 다른 시스템에서 로그 인젝션으로 악용될 수 있음
공격자는 조작된 프로토콜 요청을 통해 오류 로그에 임의의 내용을 삽입할 수 있다. 이는 두 가지 위험을 만든다.
- 로그 인젝션: 공격자가 오류 로그에 가짜 로그 항목을 삽입해 분석을 방해하거나 오해를 유발할 수 있다.
- 정보 수집: 오류 메시지가 클라이언트에게 반환되는 구조라면, 공격자가 서버 내부 상태 정보를 수집하는 데 활용할 수 있다.
영향 범위: net/textproto 패키지를 직접 사용하는 서버, 또는 이를 기반으로 동작하는 net/http 서버 중 오류를 로그로 상세히 출력하거나 클라이언트에 반환하는 경우.
DoS 유형은 아니지만, 구조화된 로그 환경에서 로그 신뢰성을 해칠 수 있고 공격 탐지를 방해할 수 있다는 점에서 무시할 수 없는 취약점이다.
수정된 버전에서는 오류 메시지에 포함되는 입력값을 적절히 이스케이프하도록 변경됐다.
golang.org/x 패키지 추가 취약점
6월 2일 릴리스와 함께 공개된 golang.org/x 확장 패키지 취약점도 확인이 필요하다. 표준 라이브러리 취약점은 아니지만, 많은 프로젝트에서 의존성으로 사용하는 패키지들이다.
| CVE | 패키지 | 유형 | 공개일 | 설명 |
|---|---|---|---|---|
| CVE-2026-46598 | golang.org/x/crypto (ed25519) | Panic/Crash | 2026-05-22 | 기형 ed25519 개인키 바이트가 검증 없이 캐스팅돼 패닉 발생 |
| CVE-2026-46599 | golang.org/x/image (TIFF decoder) | DoS | 2026-05-29 | PackBits 압축 데이터 크기 제한 부재로 소형 악성 이미지가 과도한 디코딩 유발 |
| CVE-2026-42500 | golang.org/x/image (BMP decoder) | Panic/Crash | 2026-05-29 | 팔레트 인덱스 범위 초과 시 패닉 발생 |
golang.org/x/crypto는 특히 사용 빈도가 높다. SSH 클라이언트/서버, TLS 확장, 각종 암호화 기능 구현에 널리 사용된다. ed25519 패닉 취약점(CVE-2026-46598)은 공격자가 조작된 개인키를 제공할 수 있는 환경에서 서버 프로세스를 강제 종료시킬 수 있다.
업그레이드 방법
1. 현재 Go 버전 확인
1
2
go version
# 출력 예: go version go1.26.3 linux/amd64
2. Go 1.26.4 또는 1.25.11로 업그레이드
공식 다운로드 페이지(go.dev/dl)에서 OS/아키텍처에 맞는 바이너리를 받거나, 패키지 매니저를 사용한다.
1
2
3
4
5
6
7
8
9
10
11
# Linux/Mac (공식 인스톨러 스크립트 또는 tar 사용)
# 기존 Go 설치 제거 후 새 버전 설치
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.26.4.linux-amd64.tar.gz
# 버전 확인
go version
# go version go1.26.4 linux/amd64
# brew (macOS)
brew upgrade go
3. golang.org/x 패키지 업데이트
1
2
3
4
# 모듈 프로젝트에서 의존성 업데이트
go get golang.org/x/crypto@latest
go get golang.org/x/image@latest
go mod tidy
4. 취약점 스캔 도구 활용
Go 공식 취약점 스캐너 govulncheck를 사용하면 현재 프로젝트에서 영향을 받는 취약점을 빠르게 확인할 수 있다.
1
2
3
4
5
# govulncheck 설치
go install golang.org/x/vuln/cmd/govulncheck@latest
# 현재 프로젝트 스캔
govulncheck ./...
govulncheck는 단순히 의존성 목록이 아닌 실제 코드에서 취약한 함수가 호출되는지를 분석하므로, 불필요한 업그레이드를 줄이는 데 도움이 된다.
업계 반응
JustAppSec는 이번 릴리스를 분석하면서 “세 취약점 모두 원격에서 트리거 가능하며, 특히 crypto/x509와 mime의 DoS 위험은 공개 API 서버를 운영하는 팀에서 즉시 검토가 필요하다”고 평가했다.
Go 개발자 커뮤니티에서는 이번 릴리스를 두고 “이차 복잡도 버그가 표준 라이브러리 수준에서 수년간 존재했다는 것이 흥미롭다”는 반응과, “x.509 인증서를 통한 DoS는 mTLS 환경에서 실질적인 위협이 될 수 있어 패치 적용이 중요하다”는 의견이 공유됐다. Go GitHub 이슈 트래커와 golang-announce 메일링 리스트를 통해 공개된 CVE 상세가 확산됐다.
Go는 강력한 타입 시스템과 메모리 안전성으로 알려져 있지만, 이번 취약점들은 알고리즘적 복잡도와 입력 검증이라는 언어 수준의 안전성만으로는 해결되지 않는 영역에서도 취약점이 발생할 수 있음을 보여준다. 실제로 crypto/x509의 이차 복잡도 문제는 Go의 메모리 안전성과 무관하게, 설계 수준의 경계 처리 부재에서 비롯된 것이다.
보안 릴리스이므로 세부 패치 노트는 Go 공식 릴리스 블로그(go.dev/doc/devel/release)와 취약점 데이터베이스(pkg.go.dev/vuln)에서 직접 확인하는 것을 권장한다.
정리
- Go 1.26.4와 Go 1.25.11이 2026년 6월 2일 릴리스됐다. 3개의 보안 취약점을 수정한 보안 패치 릴리스다.
- CVE-2026-27145 (crypto/x509):
VerifyHostname의 이차 복잡도 DoS — SAN 항목이 많은 인증서로 CPU·메모리를 고갈시킬 수 있다. mTLS/클라이언트 인증 환경에서 특히 주의. - CVE-2026-42504 (mime): 유효하지 않은 encoded-word 대량 포함 MIME 헤더로 CPU를 고갈시킬 수 있다. 이메일 처리, 파일 업로드 API, 멀티파트 처리 서비스가 영향권.
- CVE-2026-42507 (net/textproto): 오류 메시지에 이스케이프 없이 입력값이 포함되어 로그 인젝션/정보 수집에 악용될 수 있다.
golang.org/x/crypto(CVE-2026-46598) 및golang.org/x/image(CVE-2026-46599, CVE-2026-42500) 도 별도 취약점이 공개됐으므로go get latest업데이트가 필요하다.govulncheck ./...로 현재 프로젝트에서 실제로 취약한 코드 경로가 존재하는지 먼저 스캔한 뒤 업그레이드 우선순위를 판단하는 것이 효율적이다.- Go 1.24.x 이하는 공식 지원이 종료됐으므로, 보안 패치를 받으려면 1.25.x 이상으로 업그레이드가 필요하다.
Reference
- Go — Release History (go.dev/doc/devel/release)
- pkg.go.dev/vuln — GO-2026-5037 (CVE-2026-27145, crypto/x509)
- pkg.go.dev/vuln — GO-2026-5038 (CVE-2026-42504, mime)
- pkg.go.dev/vuln — GO-2026-5039 (CVE-2026-42507, net/textproto)
- JustAppSec — Go 1.26.1 and Go 1.25.8 released with five security fixes
- golang.org/x/vuln — govulncheck