Correct Code, Vulnerable Dependencies: A Large Scale Measurement Study of LLM-Specified Library Versions
이 대규모 측정 연구는 LLM 이 특정 위험한 릴리스에 대한 체계적인 편향으로 인해 생성된 Python 코드에서 취약하고 호환되지 않는 서드파티 라이브러리 버전을 빈번하게 지정한다는 사실을 밝혀내어 AI 지원 소프트웨어 개발에서 간과되어 왔던 중요한 위험 표면을 드러냈습니다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
당신의 소프트웨어 프로젝트를 위해 코드를 작성하는 초지능적이고 엄청나게 빠른 개인 비서를 고용한다고 상상해 보세요. 이 비서는 대규모 언어 모델 (LLM) 로 구동되며, "이것이 문을 잠그는 방법입니다"나 "이것이 메시지를 보내는 방법입니다"와 같은 논리를 작성하는 데 뛰어납니다.
하지만 함정이 하나 있습니다. 코드를 작동시키려면 이 비서가 이미 존재하는 "도구"(서드파티 라이브러리) 를 사용해야 합니다. 이 논문이 조사하는 문제는 비서가 단순히 도구를 가져오는 것이 아니라, 특정 구식이고 때로는 고장 난 도구 버전을 가져오며, 당신이 이를 눈치채지 못하게 한다는 점입니다.
다음은 간단한 비유를 사용한 연구 결과의 요약입니다:
1. "레시피" 대 "쇼핑 목록"
연구진은 비서에게 코드를 요청하는 두 가지 방식을 테스트했습니다:
- "인라인 (Inline)" 모드: 코드 조각을 요청하면 비서가 코드를 작성하고 각 도구 옆에 "도구 X 버전 1.0 사용"이라는 작은 메모를 추가합니다.
- "매니페스트 (Manifest)" 모드: 비서에게 코드 조각과 도구용 별도의 쇼핑 목록 (requirements.txt 파일) 을 함께 작성하도록 요청합니다.
결과:
"인라인" 메모를 요청했을 때 비서는 95% 의 경우 정확한 버전을 명시하는 데 매우 열성적이었습니다. 하지만 "쇼핑 목록"을 요청했을 때 갑자기 게으르고 모호해져서 버전 번호를 비워두는 경우가 6% 에서 59% 에 불과했습니다.
- 비유: 요리사가 레시피를 쓰라고 하면 "정확히 2015 년산 소금"이라고 말하지만, 온 주방을 위한 쇼핑 목록을 쓰라고 하면 그냥 "소금"이라고만 적고 어떤 연도의 소금을 살지 당신이 알아서 결정하게 만드는 것과 같습니다.
2. "상한 우유" 문제 (보안 위험)
연구진은 비서가 특정 버전을 선택할 때, 그 버전이 종종 위험하다는 사실을 발견했습니다.
- 통계: 비서가 선택한 특정 버전 중 37% 에서 56% 는 알려진 보안 취약점 (CVE) 을 가지고 있었습니다.
- 심각도: 이러한 취약점 대부분은 "치명적 (Critical)" 또는 "높음 (High)" 심각도였습니다.
- 반전: 이러한 취약점들은 비밀이 아니었습니다. 비서가 훈련되기 전부터 공개된 사실이었습니다. 비서만 이를 피해야 한다는 것을 알지 못했을 뿐입니다.
- 비유: 비서가 항상 3 년 전에 유통기한이 지난 우유를 골라내는 시간 여행자라고 상상해 보세요. 유통기한은 수년 전부터 팩에 인쇄되어 있었지만, 비서는 그것이 신선하다고 생각하며 여전히 그 상한 우유를 당신에게 건네줍니다.
3. "수렴 (Convergence)" 효과 (모두가 같은 나쁜 것을 선택함)
서로 다른 AI 모델들이 서로 다른 버전을 선택할 것이라고 생각할 수 있습니다. 하지만 그렇지 않습니다.
- 결과: 구글, 오픈AI, 알리바바 등에서 테스트한 10 개의 모든 모델이 정확히 동일한 소수의 위험한 버전으로 수렴했습니다. 비서가 "도구 X"를 선택하면, 더 새롭고 안전한 버전이 존재하더라도 거의 항상 "버전 2.31.0"을 선택합니다.
- 비유: 도시의 모든 사람이 배경과 관계없이, 밑창이 깨진 것으로 알려진 똑같은 한 켤레의 신발을 사기로 결정한 것과 같습니다. 이는 우연이 아니라, 같은 오래된 교과서에서 배운 공유된 습관입니다.
4. "고장 난 열쇠" 문제 (호환성)
도구가 위험하지 않더라도, 호환되지 않을 수 있습니다.
- 결과: 비서들이 선택한 버전들은 종종 설치되지 않거나 작성한 코드와 작동하지 않았습니다.
- 정적 검사: 코드 자체가 설치되지 않았습니다 (네모난 못을 둥근 구멍에 넣으려는 것과 같습니다).
- 동적 검사: 설치가 되었다 하더라도 실행을 시도하면 코드가 충돌했습니다.
- 원인: 비서들은 매우 오래된 도구 버전을 선택하는 것을 좋아합니다. 이러한 오래된 버전들은 현대 컴퓨터에서 제거된 컴퓨터 시스템의 구성 요소에 의존합니다.
- 비유: 비서가 "불을 켜라"는 코드를 작성하지만, 2026 년 집에는 존재하지 않는 소켓이 필요한 1990 년산 전구를 지정합니다. 코드는 완벽하지만 전구를 나사를 조일 수 없습니다.
5. 왜 단순히 비서에게 "더 잘하라"고 말할 수 없을까요?
연구진은 이를 해결하기 위해 몇 가지 시도를 했습니다:
- "안전하게 해 주세요" 프롬프트: 비서에게 "보안 구멍이 있는 버전은 사용하지 마세요"라고 말했습니다.
- 결과: 효과가 없었습니다. 비서는 여전히 나쁜 버전을 선택했습니다.
- 이유: 비서가 규칙을 "잊은" 것이 아니라, 안전 경고 라이브 데이터베이스에 연결되어 있지 않기 때문입니다. 2023 년 교과서를 외운 학생에게 2025 년에 제정된 새로운 법을 피하라고 하는 것과 같습니다. 그들은 머릿속에 그 정보가 literally 없습니다.
- "외부 앵커 (External Anchor)" 수정: 연구진이 비서에게 인간이 제공한 엄격한 쇼핑 목록과 같은 사전 승인된 안전 버전 목록을 사용하도록 강제했을 때, 문제들은 사라졌습니다.
- 결과: 보안 위험이 감소했고 코드가 실제로 작동했습니다.
결론
이 논문은 LLM 은 코드의 "논리"를 작성하는 데는 뛰어나지만, 도구의 "공급망"을 관리하는 데는 형편없다고 결론지었습니다.
그들은 완벽해 보이지만 실제로는 위험하고 구식인 판본을 건네주는 친절하지만 신뢰할 수 없는 사서처럼 행동합니다. 그들이 제안하는 특정 버전 번호를 신뢰해서는 안 됩니다. 이를 대략적인 초안으로 간주하고 사용하기 전에 보안 도구를 통해 항상 버전 번호를 이중으로 확인해야 합니다.
문제는 AI 가 "바보"라는 것이 아닙니다. AI 는 인기 있지만 오래된 버전을 선호하도록 구식 데이터로 훈련되었으며, 현재 안전 경고에 대한 라이브 연결이 부족하다는 것입니다. AI 가 라이브 안전 도구에 연결될 때까지는 인간 개발자가 유통기한을 확인해야 합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.