하드코딩된 자격증명 (Hardcoded Credentials)
Hardcoded Credentials
설명
하드코딩된 자격증명(Hardcoded Credentials)은 소스코드 내에 인증서, 비밀번호, 암호화 키, API Key 등 중요한 비밀 정보를 직접 작성해 두는 취약점입니다. 소스코드는 다양한 경로(깃 저장소, 배포 아카이브 등)로 유출될 위험이 있으며, 여기에 저장된 비밀 정보도 함께 노출되어 외부 혹은 내부 공격자가 무단으로 시스템에 접근할 수 있습니다.
잠재적 영향
무단 접근 (비인가된 접근): 하드코딩된 비밀이 외부에 노출될 경우, 공격자가 JWT 토큰을 위조하거나 탈취하여 시스템을 무단으로 접근할 수 있습니다.
데이터 유출: 중요한 데이터에 접근해 정보를 유출하거나 변조할 수 있습니다.
서비스 손상: 인증서나 키가 노출될 경우 전체 서비스가 중단될 수 있으며, 신뢰성이 크게 저하됩니다.
해결 방법
비밀 정보(Secret)는 소스코드에 절대 직접 작성하지 않습니다.
환경변수(environment variable), 파일 기반 비밀 저장소, 혹은 보안 vault(HSM, Secret Manager 등)에서 값을 불러와 사용합니다.
소스코드와 별도의 설정 파일에 비밀 정보를 분리해 관리하고, 해당 파일은 접근 권한을 엄격히 제한합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
const { JWT } = require('jose')
const payload = {foo: 'bar'}
// 취약: 비밀키가 소스코드 내에 하드코딩됨
const token = JWT.sign(payload, 'my-secret-key')안전한 코드
설명:
취약한 코드: 비밀키('my-secret-key')가 코드에 직접 노출되어 있습니다. 코드를 열람할 수 있는 누구나 이 값을 통해 JWT 토큰을 위조하거나 시스템에 접근할 수 있습니다.
안전한 코드: 비밀키를 환경변수(process.env.JWT_SECRET)에서 불러오도록 하여, 코드 자체에는 비밀 정보가 남지 않으므로 외부에 노출 위험이 줄어듭니다. 또한, 운영 환경별로 다른 키를 사용할 수 있어 보안 관리가 더 수월합니다.
참조
Last updated