1. Ollama

- 로컬 환경에서 LLM을 구동할 수 있게 해주는 오픈소스 도구 [1]

2. GGUF 포맷 및 모델 인스턴스 생성

2.1 GGUF (GPT-Generated Unified Format)

- GGUF 파일은 LLM을 로컬 환경에서 효율적으로 로드하고 실행하기 위해 설계된 파일 포맷 [2][3][4]

- 모델의 학습된 매개변수(가중치)를 나타내는 다차원 배열인 텐서(Tensor)와 GGUF 버전, 텐서 수량, 키-값 형태의 메타데이터 등을 포함 

[사진 1] GGUF 파일 구조

2.2 모델 인스턴스 생성

① GGUF 파일 업로드

- 사용자는 /api/blobs/sha256:[sha256-digest] API를 사용하여 Ollama 서버에 GGUF 파일을 업로드할 수 있음

> 이때, [sha256-digest]는 파일 내용을 기반으로 계산된 값으로, 실제 파일 내용은 HTTP 요청 Body에 담겨 전송

[사진 2] GGUF 업로

② 모델 인스턴스 생성

- Ollama에서 모델을 생성하는 방법은 크게 두 가지 API 엔드포인트로 나뉨

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

[사진 3] /api/create API를 이용한 모델 생성

③ 모델 생성 호출 흐름

- Ollama는 성능 최적화와 처리 향상을 위해 unsafe 패키지를 사용하며, /api/create 엔드포인트를 사용한 모델 생성 과정에서 구체적인 호출 흐름은 다음과 같음

  ⑴ server.CreateHandler

    > 수신된 HTTP 요청에 대한 구문 분석 후 모델 이름 및 파일 경로의 유효성 검증

  ⑵ convertModelFromFiles

    > 파일을 기반으로 모델을 생성할 때 호출되며 파일의 형식(확장자 등)을 확인

    > GGUF 파일 형식일 경우 해당 파일을 Layer로 파싱하여 메타데이터와 모델 텐서를 모두 저장

  ⑶ createModel

    > 모델 생성양자화 여부를 결정

    > 사용자의 명시적인 요청이 있고, GGUF 파일 형식이며, 현재 형식이 요청된 형식과 다를 경우 양자화를 수행

  ⑷ WriteTo

    > 텐서 데이터를 대상 형식으로 변환

    > 최적화를 위해 소스 데이터를 F32 형식으로 변환한 뒤 대상 형식으로 다시 변환

    > 소스 유형이 이미 F32 형식인 경우 원본 버퍼의 데이터를 직접 복사하며, 그렇지 않은 경우에는 ggml.ConvertToF32()를 호출

    > 이후 ggml.Quantize()를 호출하여 F32 데이터를 최종 대상 형식으로 변환

    > 대상 유형이 F32인 경우에는 추가 변환 없이 데이터를 직접 복사

3. 취약점

[사진 4] CVE-2026-7482

- 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 파일 헤더에 선언된 텐서 크기와 실제 데이터의 크기가 일치하는지 검증하지 않아 힙 메모리 범위를 벗어난 읽기 발생

[사진 5] 메모리 범위를 벗어난 읽기

3.1 PoC

- 세 번의 요청을 통해 민감 데이터를 외부로 유출 가능 [7]

① 악성 GGUF 파일 업로드

- 공격자는 헤더 내 텐서의 크기를 임의로 크게 부풀려 악성 GGUF 파일을 생성

- /api/blobs 엔드포인트를 호출해 해당 파일을 Ollama 서버에 업로드

② 악성 GGUF 파일을 사용한 모델 생성

- /api/create 엔드포인트를 사용해 악성 GGUF 파일을 기반으로한 모델 생성

- 모델 생성 과정에서 힙 메모리 범위를 벗어난 읽기 발생하며 읽힌 메모리 데이터가 모델 데이터 내 병합되어 저장

- 이때, 모델 이름을 공격자 제어 URI로 지정 가능

③ 데이터 유출

- /api/push 엔드포인트는 모델 이름이 URI 형로 지정되었을 때 해당 주소로 모델 업로드

- 유효성 검증 등 적절한 검증이 없어 유출 데이터가 포함된 모델을 외부 서버로 유출 가능

[사진 6] 공격 과정 요약

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

+ Recent posts