1. Ollama
- 로컬 환경에서 LLM을 구동할 수 있게 해주는 오픈소스 도구 [1]
2. GGUF 포맷 및 모델 인스턴스 생성
2.1 GGUF (GPT-Generated Unified Format)
- GGUF 파일은 LLM을 로컬 환경에서 효율적으로 로드하고 실행하기 위해 설계된 파일 포맷 [2][3][4]
- 모델의 학습된 매개변수(가중치)를 나타내는 다차원 배열인 텐서(Tensor)와 GGUF 버전, 텐서 수량, 키-값 형태의 메타데이터 등을 포함

2.2 모델 인스턴스 생성
① GGUF 파일 업로드
- 사용자는 /api/blobs/sha256:[sha256-digest] API를 사용하여 Ollama 서버에 GGUF 파일을 업로드할 수 있음
> 이때, [sha256-digest]는 파일 내용을 기반으로 계산된 값으로, 실제 파일 내용은 HTTP 요청 Body에 담겨 전송

② 모델 인스턴스 생성
- Ollama에서 모델을 생성하는 방법은 크게 두 가지 API 엔드포인트로 나뉨
| 구분 | 설명 |
| /api/pull API 엔드포인트 | - Ollama 레지스트리에서 기존에 빌드된 모델을 다운로드하여 로컬 스토리지에 저장 및 사용 |
| /api/create API 엔드포인트 | - 사용자가 시스템 프롬프트, 양자화 수준 등을 직접 지정하여 커스텀 모델을 생성 > 이때 기반이 되는 베이스 모델은 ① from 매개변수를 통해 원격 레지스트리에서 가져오거나, ② [sha256-digest]를 통해 이전에 업로드된 모델 파일에서 가져올 수 있음 |

③ 모델 생성 호출 흐름
- Ollama는 성능 최적화와 처리 향상을 위해 unsafe 패키지를 사용하며, /api/create 엔드포인트를 사용한 모델 생성 과정에서 구체적인 호출 흐름은 다음과 같음
⑴ server.CreateHandler
> 수신된 HTTP 요청에 대한 구문 분석 후 모델 이름 및 파일 경로의 유효성 검증
⑵ convertModelFromFiles
> 파일을 기반으로 모델을 생성할 때 호출되며 파일의 형식(확장자 등)을 확인
> GGUF 파일 형식일 경우 해당 파일을 Layer로 파싱하여 메타데이터와 모델 텐서를 모두 저장
⑶ createModel
> 모델 생성 및 양자화 여부를 결정
> 사용자의 명시적인 요청이 있고, GGUF 파일 형식이며, 현재 형식이 요청된 형식과 다를 경우 양자화를 수행
⑷ WriteTo
> 텐서 데이터를 대상 형식으로 변환
> 최적화를 위해 소스 데이터를 F32 형식으로 변환한 뒤 대상 형식으로 다시 변환
> 소스 유형이 이미 F32 형식인 경우 원본 버퍼의 데이터를 직접 복사하며, 그렇지 않은 경우에는 ggml.ConvertToF32()를 호출
> 이후 ggml.Quantize()를 호출하여 F32 데이터를 최종 대상 형식으로 변환
> 대상 유형이 F32인 경우에는 추가 변환 없이 데이터를 직접 복사
3. 취약점

- GGUF 텐서 파싱 중 선언된 텐서 오프셋 크기와 실제 길이와 일치하는지 검증하지 않아 모델 생성 중 힙 메모리 범위를 벗어난 읽기가 가능한 취약점 (CVSS: 9.1) [5][6]
> 해당 메모리 영역에 환경 변수, API 키, 시스템 프롬프트, 사용자 대화 등 민감 데이터가 포함될 수 있음
영향받는 버전
- Ollama 0.17.1 미만
- WriteTo() 함수에서 소스 유형이 F32 형식이 아닐 경우 ConvertToF32() 함수를 호출해 형식을 변경
> ConvertToF32()는 세 가지 매개변수(원본 데이터 버퍼, 소스 유형, q.from.Elements())를 가짐
> 이중 q.from.Elements()는 텐서의 각 차원을 모두 곱한 전체 요소 수를 반환하며, 텐서 shape이 (3,3,3)인 경우 27을 반환
> 이때, GGUF 파일 헤더에 선언된 텐서 크기와 실제 데이터의 크기가 일치하는지 검증하지 않아 힙 메모리 범위를 벗어난 읽기 발생

3.1 PoC
- 세 번의 요청을 통해 민감 데이터를 외부로 유출 가능 [7]
① 악성 GGUF 파일 업로드
- 공격자는 헤더 내 텐서의 크기를 임의로 크게 부풀려 악성 GGUF 파일을 생성
- /api/blobs 엔드포인트를 호출해 해당 파일을 Ollama 서버에 업로드
② 악성 GGUF 파일을 사용한 모델 생성
- /api/create 엔드포인트를 사용해 악성 GGUF 파일을 기반으로한 모델 생성
- 모델 생성 과정에서 힙 메모리 범위를 벗어난 읽기 발생하며 읽힌 메모리 데이터가 모델 데이터 내 병합되어 저장
- 이때, 모델 이름을 공격자 제어 URI로 지정 가능
③ 데이터 유출
- /api/push 엔드포인트는 모델 이름이 URI 형로 지정되었을 때 해당 주소로 모델 업로드
- 유효성 검증 등 적절한 검증이 없어 유출 데이터가 포함된 모델을 외부 서버로 유출 가능

4. 대응방안
- 벤더사 제공 업데이트 적용 [8][9]
> 즉시 업데이트가 불가할 경우 Ollama의 외부 접근 제한, API 키 교체, 'sudo systemctl edit ollama.service' 명령을 통해 OLLAMA_HOST=0.0.0.0 설정문구 삭제 권고
| 취약점 | 제품명 | 영향받는 버전 | 해결 버전 |
| CVE-2026-7482 | Ollama | 0.17.1 미만 | 0.17.1 이상 |
5. 참고
[1] https://ollama.com/
[2] https://www.minzkn.com/vibecoding/pages/gguf-format.html
[3] https://huggingface.co/docs/hub/gguf
[4] https://github.com/ggml-org/ggml/blob/master/docs/gguf.md
[5] https://nvd.nist.gov/vuln/detail/CVE-2026-7482
[6] https://www.cyera.com/research/bleeding-llama-critical-unauthenticated-memory-leak-in-ollama
[7] https://github.com/0x0OZ/CVE-2026-7482-PoC
[8] https://github.com/ollama/ollama/commit/88d57d0483cca907e0b23a968c83627a20b21047
[9] https://www.krcert.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=72047&menuNo=205020
[10] https://thehackernews.com/2026/05/ollama-out-of-bounds-read-vulnerability.html
'취약점 > BoF' 카테고리의 다른 글
| NGINX Heap-based Buffer Overflow 취약점 (CVE-2026-42945, NGINX Rift) (0) | 2026.05.21 |
|---|---|
| NetScaler ADC and NetScaler Gateway 경계 밖 메모리 읽기 취약점 (CVE-2025-5777, CitrixBleed2) (1) | 2025.07.15 |
| Ivanti Connect Secure Stack Buffer Overflow 취약점 (CVE-2025-0282, CVE-2025-22457) (0) | 2025.05.15 |
| Redis 스택 버퍼 오버플로우 취약점 (CVE-2024-31449) (1) | 2024.11.23 |
| DrayTek BoF 취약점 (CVE-2024-41592, CVE-2024-41585) (0) | 2024.11.11 |
