NocoBase plugin-ai 2.1.0부터 2.2.41까지 버전에서 인증된 사용자가 자신에게 부여되지 않은 AI 직원을 해당 직원에 매핑된 도구와 권한으로 실행하거나 그 프롬프트와 도구 설정을 조회하는 권한 우회가 확인됐고, 이 취약점은 CVE-2026-125397로 식별된다. 악용에는 인증된 사용자, 즉 계정을 확보한 사용자가 전제되므로 무인증 원격 코드 실행과는 성격이 다르다. 다만 실제 피해 규모는 각 AI 직원에 연결된 도구와 권한 구성이 결정한다.
역할 기반으로 분리해 둔 AI 직원 접근 경계가 호출자의 요청 값으로 무력화되는 구조적 결함이고, 실행 권한과 조회 권한 두 방향 모두에 영향을 준다. AI 에이전트에 업무 권한을 위임한 환경일수록 이 NocoBase 취약점은 단순한 설정 오류와는 다른 무게를 갖는다.
취약점 개요: CVE-2026-125397과 영향 버전(2.1.0~2.2.41)
취약점 번호는 CVE-2026-125397이고 영향 범위는 NocoBase plugin-ai 2.1.0부터 2.2.41까지다. 인증된 사용자가 자신의 역할에 할당되지 않은 AI 직원에 접근할 수 있는 권한 우회로 분류된다. 기술적 원인은 접근 대상 AI 직원을 특정하는 getAccessibleAIEmployee() 함수이며, 악용에는 인증된 사용자가 필요하다.
| 항목 | 내용 |
|---|---|
| CVE 식별 번호 | CVE-2026-125397 |
| 영향 대상 | NocoBase plugin-ai 2.1.0 ~ 2.2.41 |
| 기술적 원인 | getAccessibleAIEmployee() 함수의 접근 필터 결함 |
| 공격 전제 조건 | 인증된 사용자(계정을 확보한 사용자) |
| 실행 계열 영향 | dispatch-sub-agent-task로 미부여 AI 직원을 해당 직원의 도구·권한으로 실행 |
| 조회 계열 영향 | get-ai-employee로 해당 직원의 프롬프트·도구 설정 조회 |
| 수정 방향 | 사용자 이름 조건과 역할 허용 조건의 $and 결합 |
| 수정 릴리스 버전 | 이번 분석 기준 미확정(벤더 공식 발표 확인 필요) |
기술 원인: getAccessibleAIEmployee()의 username 덮어쓰기
원인은 접근 대상 AI 직원을 특정하는 getAccessibleAIEmployee() 함수다. 이 함수는 역할 기반으로 접근 범위를 좁히는 필터를 구성하지만, 그 필터의 사용자 이름 항목이 호출자가 지정한 대상 AI 직원의 사용자 이름으로 덮어써진다.
분석 리포트가 인용한 v2.2.41 sub-agents/shared.ts 코드는 다음과 같다.
const filter = await buildAccessibleEmployeeFilter(ctx);
return ctx.db.getRepository('aiEmployees').findOne({ filter: {...filter, username } })
객체 리터럴에서 같은 키는 나중에 온 값이 앞의 값을 대신한다. 그래서 역할이 만들어 둔 사용자 이름 목록 항목은 호출자가 지정한 접근 대상 AI 직원의 사용자 이름으로 대체되고, 역할로 좁혀 놓은 조회 조건이 요청에 담긴 사용자 이름에 덮어써지는 구조다.
다만 리포트 스스로 밝힌 한계도 있다. 제시된 코드 조각만으로는 역할 필터의 username 항목 외 다른 조건들이 최종 조회에서 어떻게 평가되는지까지 단정할 수 없다.
공격 경로: dispatch-sub-agent-task 실행과 get-ai-employee 조회
실행: 미부여 AI 직원의 도구와 권한으로 작업 수행
dispatch-sub-agent-task 도구를 이용하면 사용자에게 부여되지 않은 AI 직원을 그 직원에 매핑된 도구와 권한 그대로 실행하게 된다. 실행 시 영향은 그 AI 직원에 부여된 도구와 권한을 따르므로, 강한 도구나 권한이 연결된 AI 직원일수록 같은 결함으로 도달 가능한 피해가 커진다.
조회: 프롬프트와 도구 설정 노출
get-ai-employee로 해당 직원의 프롬프트와 도구 설정을 읽어낸다. 노출되는 것은 그 직원의 프롬프트와 도구 설정이다.
동일 결함의 이중 영향
두 도구는 AI 직원을 해석할 때 같은 접근 확인 함수를 거치므로, 동일한 권한 확인 결함의 영향을 함께 받는다. 공격 전제가 인증된 사용자라는 점에서 무인증 원격 코드 실행과는 성격이 다르다. 분석 시점 기준으로 실제 환경 악용 사례, 공개 공격 코드(PoC), 독립적 기술 검증은 확인된 바 없다.
수정 방향: $and 결합과 아직 미확정인 업그레이드 경로
수정은 요청된 사용자 이름에 일치한다는 조건과 역할에 허용된 직원이라는 조건을 $and로 묶어 한쪽이 다른 쪽을 덮지 못하게 하는 방식이다. 수정 PR(nocobase/nocobase#11009)에는 이 헬퍼의 단위 테스트도 함께 추가됐다.
다만 수정이 포함된 정식 릴리스와 구체적 수정 버전은 이번 분석에서 확인하지 못했다. 업그레이드 대상 확정 전에 NocoBase 공식 권고문과 CVE 원문 기록을 직접 확인해야 한다. CVSS 등 공식 평가 수치 역시 아직 검증되지 않은 상태다. 이 글의 실질적 기술 근거는 단일 2차 분석 리포트이므로, 핵심 수치와 기술 세부를 대응 결정에 반영하기 전에 공식 1차 소스와의 교차 확인이 필요하다.
대응 우선순위: 활성 AI 직원의 도구·권한 구성 점검
리포트는 다음 순서로 영향 여부를 좁혀보라고 권고한다.
- 사용 중인 plugin-ai 버전이 2.1.0부터 2.2.41까지 범위인지 확인한다.
- 활성화된 AI 직원 목록과 역할별 할당 현황, 각 직원에 연결된 도구와 권한을 정리한다.
- 영향 범위에 해당하면서 민감한 도구 또는 권한을 가진 AI 직원이 있는 환경을 우선 검토한다.
이 순서는 어디까지나 확인된 우회 경로와 권한 사용 가능성에 근거한 조건부 판단이다. 구체적 로그 항목과 탐지 규칙은 이번 분석에서 확인되지 않았으므로, 로그 기반 침해 여부 판단은 로그 존재를 전제로 한 제한적 안내에 그친다.
이 취약점의 실질 위험은 결함의 존재 자체가 아니라 각 AI 직원에 어떤 도구와 권한이 연결돼 있는지에 달려 있다. 영향 버전을 운영 중이라면 수정 릴리스 확인과 별개로 민감한 도구·권한을 가진 AI 직원의 할당 구성부터 우선 검토하는 것이 리포트의 권고다.