CVE-2026-122160: AIlice HuggingFace 모델 래퍼 취약점이란?

CVE-2026-122160는 myshell-ai의 오픈소스 AI 에이전트 AIlice 0.4.0 이하에서 HuggingFace 모델 래퍼가 PEFT 어댑터가 지정한 기반 모델을 확인 없이 내려받을 수 있게 하는 취약점이다. 공격자가 어댑터 설정을 제어할 수 있다면 의도하지 않은 저장소의 모델이 다운로드될 수 있으며, CVE 레코드는 원격 공격 가능성과 익스플로잇 공개 상태를 함께 기술하고 있다.

개요: 어댑터 파일 안에 들어오는 모델 참조

AIlice는 오픈소스 LLM을 기반으로 JARVIS와 유사한 독립형 인공지능 어시스턴트를 목표로 하는 완전 자율 범용 AI 에이전트 프로젝트다. 이번 취약점은 이 에이전트가 모델을 불러오는 경로에서 PEFT 어댑터를 처리하는 지점에 있다.

핵심은 어댑터라는 익숙한 파일 안에 실행 대상이 되는 모델 저장소 참조가 함께 들어온다는 구조다. 사용자 입장에서는 어댑터 하나만 승인한 것처럼 보이지만, 실제 다운로드 대상은 어댑터 내부 설정이 결정한다. CVE-2026-122160으로 등록된 이 문제는 바로 이 참조가 검증 없이 처리되는 지점을 다룬다.

영향 범위: AIlice 0.4.0 이하와 LoadModel_PEFT 어댑터 로딩 경로

영향 범위는 myshell-ai AIlice 0.4.0 이하다. 코드 관점에서는 ailice/core/llm/AModelCausalLM.py의 LoadModel_PEFT 함수, 즉 HuggingFace Model Wrapper 구성요소가 영향을 받으며, PEFT 어댑터의 기반 모델을 불러올 때 적용된다.

항목 내용
취약점 식별 번호 CVE-2026-122160
영향 소프트웨어 myshell-ai AIlice 0.4.0 이하
영향 구성 요소 ailice/core/llm/AModelCausalLM.py의 LoadModel_PEFT 함수(HuggingFace Model Wrapper)
조작 지점 adapter_config.json의 base_model_name_or_path 항목
핵심 원인 base_model_name_or_path 인자 조작을 통한 비신뢰 제어 영역 기능 포함
다운로드 수단 transformers AutoTokenizer/AutoModelForCausalLM from_pretrained() 호출, 설정된 HF_ENDPOINT 기준(기본값 huggingface.co)
레코드의 공격 관련 서술 원격 공격 가능, 익스플로잇 공개 상태
수정 상태 공식 수정 버전과 검증된 우회책은 확인되지 않음

작동 구조: basemodelnameorpath가 다운로드 대상을 결정한다

데이터 흐름

LoadModelPEFT 함수(ailice/core/llm/AModelCausalLM.py 55-70행)는 PEFT 어댑터의 기반 모델 id를 adapterconfig.json에서 읽는다. 이는 PeftConfig.frompretrained가 해석하는 basemodelnameorpath 항목이며, 검증 없이 transformers.AutoTokenizer.frompretrained()와 transformers.AutoModelForCausalLM.frompretrained()에 전달된다. 두 호출은 설정된 Hugging Face Hub 엔드포인트(HFENDPOINT, 기본값 huggingface.co)를 기준으로 해당 필드가 이름 붙인 저장소를 내려받는다.

신뢰 경계의 이동

취약점의 요지는 basemodelnameorpath 인자의 조작이 신뢰할 수 없는 제어 영역의 기능 포함으로 이어진다는 것이다. 여기서 신뢰 경계가 한 칸 이동한다. 이용자가 어댑터만 승인해도 실제로 내려받는 모델은 어댑터가 지정한 기반 모델 저장소가 결정하므로, 어댑터의 출처 검증만으로는 로드 대상을 통제하지 못한다. 어댑터 파일 내부의 참조를 승인 대상에서 제외하면 바로 이 통제 공백이 남는다.

악용 조건과 공개 익스플로잇, 정보의 층위

CVE 레코드는 공격을 원격에서 시작할 수 있고 익스플로잇이 공개되어 악용될 수 있다고 기술하며, 프로젝트에는 이슈 보고로 문제가 일찍 전달됐지만 아직 답변이 없는 상태라고 설명한다. 이때 출처의 층위를 구분해서 읽을 필요가 있다. 익스플로잇 공개라는 진술은 CVE 레코드에서, 코드 경로와 조작 지점의 세부는 GitHub 이슈 보고에서 나오는 서로 다른 층위의 정보다.

어댑터 설정 조작이 로드 대상 조작이 되려면 세 가지 전제조건이 동시에 성립해야 한다. 어댑터 로딩 경로가 실제로 실행될 것, adapterconfig.json의 basemodelnameor_path 값을 공격자가 정할 수 있을 것, 그 값이 설정된 Hugging Face Hub 엔드포인트에서 공격자 의도의 저장소로 해석될 것이다. 실제 노출은 어댑터를 사용하는 배포인지와 어댑터 설정을 누가 정하는지에 따라 달라진다. 외부에서 받았거나 검증 없이 모은 어댑터를 쓰면 노출될 수 있고, 출처가 분명한 내부 어댑터만 다루며 기반 모델 경로가 승인된 저장소를 가리키면 공격자가 경로를 바꿀 통로는 제한된다.

공격 성립 조건으로 근거가 확인해 주는 범위는 공격자가 어댑터 설정을 제어할 수 있다면 의도하지 않은 저장소의 모델이 다운로드될 수 있다는 점까지다.

확인되는 것과 확인되지 않는 것

현재 근거로 확인되는 영향은 의도하지 않은 저장소의 모델 다운로드 가능성까지이며, 임의 코드 실행이나 구체적인 후속 피해는 제공된 자료로 확인할 수 없다. 이 취약점을 임의 코드 실행으로 단정하거나 후속 피해를 특정해 전파하는 서술은 확인된 범위를 넘어선 해석이다. 공식 수정 버전이나 검증된 우회책도 제공된 근거에서는 확인되지 않는다.

패치 공개 전 점검 포인트

수정 버전이 확인되지 않는 시점에서는 코드 위치와 메커니즘을 기준으로 자체 점검하는 것이 현실적인 대응이다. 확인된 사실에 근거한 점검 순서는 다음과 같다.

  1. 사용 중인 AIlice가 0.4.0 이하 버전인지 확인한다.
  2. 서비스 경로에서 LoadModel_PEFT를 통한 PEFT 어댑터 로딩이 실제로 사용되는지 정리한다.
  3. 사용 중인 어댑터의 adapterconfig.json에서 basemodelnameor_path 값을 확인하고, 그 값이 설정된 Hugging Face Hub 엔드포인트 기준으로 어느 저장소로 해석되는지, 신뢰할 수 있는 저장소를 가리키는지 점검한다.
  4. 출처나 경로가 불명확한 어댑터는 확인이 끝날 때까지 사용을 보류한다.
  5. 승인과 검증 대상을 어댑터 출처에 더해 어댑터 내부 참조까지 포함하도록 확장한다. 그렇지 않으면 출처 검증만으로 로드 대상을 통제할 수 없다. 어댑터 설정에서 전달되는 기반 모델 경로를 신뢰할 수 있는 대상으로 검증하는 방안을 검토한다.
  6. 어댑터 설정의 기반 모델 경로와 실제로 사용된 모델 저장소를 확인할 수 있는 기록이 있다면, 승인된 출처와 비교해 예상하지 못한 참조를 조사한다.
  7. 프로젝트 이슈의 응답 상태와 공식 수정 버전 발표 여부를 계속 추적한다. 현재 이슈는 답변 없는 상태로 전달되고 있다.

결론: 통제 대상은 어댑터가 아니라 어댑터가 가리키는 경로다

CVE-2026-122160의 교훈은 신뢰 경계의 위치다. 어댑터 파일을 승인하는 행위와 그 어댑터가 참조하는 기반 모델 저장소를 내려받는 행위 사이에는 별도의 검증 지점이 존재해야 하는데, LoadModel_PEFT 경로에는 그 지점이 없다. 공식 수정 버전이나 검증된 우회책이 확인되지 않는 지금은 수정 적용을 기다리기보다 어댑터의 출처와 기반 모델 경로를 통제하는 쪽이 먼저다. 영향 버전 사용 여부와 PEFT 어댑터 로딩 경로를 점검하고, 어댑터 내부 참조까지 통제 범위에 넣는 것이 현재 근거가 지지하는 대응의 기본선이다.

댓글 남기기