피드로 돌아가기
I Audited My Own Open Source Library and Found 9 Security Bugs. Here's Every One.
Dev.toDev.to
Security

Unbounded Memory 누수 및 보안 허점 해결을 통한 layercache v1.3.3 안정화

I Audited My Own Open Source Library and Found 9 Security Bugs. Here's Every One.

날다람쥐2026년 4월 26일10intermediate

Context

Node.js 환경의 Multi-layer caching 라이브러리인 layercache의 운영 환경 내 잠재적 결함 식별을 위한 Security Audit 수행. 특히 장기 실행 서비스에서 발생하는 메모리 누수와 관리 도구의 입력 검증 부재라는 아키텍처적 취약점이 발견됨.

Technical Solution

  • Map 기반 keyEpochs 추적 로직에 MAX_KEY_EPOCHS(50,000개) 제한 및 하위 10% 데이터 Eviction 정책 도입을 통한 Memory Leak 방지
  • FetchRateLimiter 내 큐 크기를 MAX_QUEUE_PER_BUCKET(10,000개)으로 제한하고, 임계치 초과 시 Rate Limit을 Bypass 하는 가용성 우선 설계 적용
  • CLI 인터페이스에 Runtime과 동일한 validateCacheKey, validatePattern, validateTag 함수를 강제 적용하여 Redis 명령 주입 공격 방지
  • 전체 캐시 삭제(Invalidate) 명령 수행 시 --force 플래그 명시를 요구하는 확인 절차를 도입하여 운영 실수로 인한 데이터 소실 방지
  • Background Refresh 실패 로그 레벨을 debug에서 warn으로 격상하여 운영 환경 내 가시성 확보 및 Stale 데이터 원인 분석 가능 구조 구축
  • 동시성 쓰기 상황에서의 Race Condition 해결을 위해 Atomic Write 패턴으로의 전환 수행

- 모든 Map 및 Set 자료구조 도입 시 상한선(Bound)과 Pruning 로직 설계 여부 검토 - Core 라이브러리와 이를 래핑하는 CLI/Admin Tool 간의 입력 검증 로직 동기화 여부 확인 - 운영상 치명적인 데이터 삭제 명령에 대한 명시적 확인(Force Flag) 메커니즘 구현 - 운영 환경의 상태를 결정짓는 Critical Failure 로그가 Debug 레벨로 누락되었는지 점검 - 단순 Unit Test로 발견하기 어려운 TOCTOU(Time-of-Check to Time-of-Use) 이슈 방지를 위한 Atomic Operation 우선 채택

원문 읽기