
공급망, slopsquatting, typosquatting 공격으로부터 의존성과 코드를 보호합니다.
cargo install sloppy-joe
2026년 3월의 LiteLLM 공급망 공격은 월간 9700만 다운로드의 패키지를 손상시켰습니다. 공격자는 배포 자격 증명을 탈취하고, SSH 키, 클라우드 자격 증명, K8s 비밀을 수집하는 악성 버전을 푸시했습니다. sloppy-joe의 기본 72시간 버전 연령 게이트는 두 개의 감염된 버전을 모두 차단했을 것입니다. 이들은 게이트가 열리기 훨씬 전인 몇 시간 이내에 발견되었습니다. CI에서
sloppy-joe check를 실행하면 이 공격은 실패합니다. 전체 분석
AI 코드 생성기는 약 20%의 확률로 패키지 이름을 환각합니다. 공격자는 그 이름들을 등록하고 기다립니다. sloppy-joe는 npm install 또는 pip install이 실행되기 전에 CI에서 이를 잡아냅니다.
cargo install sloppy-joe
sloppy-joe check
sloppy-joe check --full
sloppy-joe check --ci
sloppy-joe check --dir ./my-project
sloppy-joe check --type npm
sloppy-joe check --python-groups dev,test --python-version 3.12 sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
sloppy-joe check --config /etc/sloppy-joe/config.json
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
sloppy-joe check --json
sloppy-joe check --review-exceptions
sloppy-joe init --register
sloppy-joe init --greenfield --ecosystem npm
sloppy-joe init --from-current
sloppy-joe init --from-current --register
sloppy-joe init > /secure/location/sloppy-joe.json
### Nix```bash
nix profile install github:brennhill/sloppy-joe
스캔 모드:
sloppy-joe check는 빠른 로컬 가드레일을 실행합니다. 항상 매니페스트 파싱, lockfile/동기화, 출처 증명, 지원되지 않는 소스 정책을 적용합니다. 종속성 또는 정책 상태가 변경되었거나 마지막 성공적인 전체 스캔이 24시간보다 오래된 경우 sloppy-joe check --full을 권장합니다.sloppy-joe check --full은 엄격한 온라인 스캔을 실행하고 기록된 성공적인 전체 스캔 상태를 새로고침합니다.sloppy-joe check --ci는 --full과 동일한 엄격한 적용 범위를 CI 지향 목적으로 실행합니다.sloppy-joe check는 기본적으로 runtime 프로필을 평가합니다. 범위가 지정된 종속성이 있으면 경고를 표시하고 CI/빌드 패리티를 위해 명시적 --python-groups, --python-extras, --python-platform 및/또는 --python-version 플래그를 전달하도록 안내합니다.sloppy-joe check 출력은 항상 CI 및 프로덕션 게이팅에 --ci 또는 --full을 사용하라고 알립니다.종료 코드: 0 = 선택한 모드에서 차단 문제 없음, 1 = 차단 문제 발견, 2 = 런타임 오류.
지원 대상: JavaScript (npm, pnpm, Yarn, Bun), Python, Rust, Go, Ruby, PHP, JVM (Gradle/Maven), .NET — 매니페스트 파일에서 자동 감지.
에코시스템 가이드: 각 에코시스템의 현재 신뢰 모델, 지원 기능, fail-closed 제한에 대한 자세한 내용은 docs/ecosystems/README.md를 참조하세요.
| 에코시스템 | 필수 매니페스트 | 신뢰하는 lockfile / 프로젝트 상태 |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json 또는 npm-shrinkwrap.json; 레거시 npm v1은 기본적으로 차단됨 |
| JavaScript / pnpm | package.json | pnpm-lock.yaml |
| JavaScript / Yarn | package.json | yarn.lock |
| JavaScript / Bun | package.json | bun.lock |
| Python | pyproject.toml, requirements*.txt, Pipfile, setup.cfg 또는 setup.py | 신뢰하는 Poetry 경로는 poetry.lock 사용, 신뢰하는 uv 경로는 uv.lock 사용, 완전 해시 잠금된 pip-tools는 커밋된 요구사항 그래프가 --index-url과 모든 --extra-index-url 값을 정확히 바인딩할 때만 신뢰됨; 저장소에 표시되는 Python 인덱스는 trusted_indexes.pypi를 통해 허용 목록에 추가 가능; 신뢰하는 Python 모드는 한 번에 선택된 하나의 설치 프로필을 평가함(기본값 runtime, 명시적 groups/extras/platform/arch/version은 CLI를 통해 전달); 레거시 매니페스트는 기본적으로 경고와 함께 허용됨 |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | 외부 종속성을 위해 go.sum 필요 |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle 또는 build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | 경고 전용: 아직 신뢰할 수 있는 프로젝트 로컬 lockfile 경로 없음 |
| .NET / NuGet | .csproj | packages.lock.json |
설정 소스: 로컬 파일 경로, HTTPS URL 또는 SLOPPY_JOE_CONFIG 환경 변수. 설정은 프로젝트 디렉터리에서 읽지 않습니다(이유는 CONFIG.md 참조).
온보딩: 저장소와 일치하는 부트스트랩 모드를 사용하세요.
sloppy-joe init --greenfield --ecosystem <eco>는 새 프로젝트를 위한 에코시스템별 시작 정책을 출력합니다. 현재 npm, pypi, cargo에 대해 그린필드 프리셋이 구현되어 있습니다. 다른 에코시스템은 "아직 지원되지 않음" 오류와 함께 실패합니다. --register를 추가하면 저장소 외부에 쓰고 안전하게 등록합니다.sloppy-joe init --from-current는 현재 저장소를 검사하고 검토 전용 부트스트랩 제안을 출력합니다. 현재 --from-current는 first-party 코드가 npm 및/또는 cargo인 저장소에서만 구현되어 있으며, 다른 에코시스템은 "아직 구현되지 않음" 오류와 함께 fail-closed됩니다. --register를 추가하면 생성된 설정을 쓰고 등록합니다.sloppy-joe init을 실행하면 중립적인 수동 템플릿이 출력됩니다.단일 바이너리. 8개 에코시스템. 16가지 공격 유형. 생성적 검사에서 거짓 긍정 없음. AI 에이전트가 변조할 수 없는 설정.
대부분의 종속성 보안 도구는 한두 가지만 확인합니다. 존재 여부 또는 편집 거리입니다. sloppy-joe는 한 번의 패스로 16가지 공격 벡터를 확인합니다: 존재하지 않는 패키지, 10가지 유형의 타이포스쿼팅(호모글리프, 범위 스쿼팅, 문자 반복, 구분자 혼동, 단어 재배열, 인접 스왑, 문자 생략, 혼동된 형태, 대소문자 변형, 버전 접미사), 표준 적용, 버전 연령 게이트, 설치 스크립트 증폭, 종속성 폭발, 유지 관리자 변경, OSV.dev를 통한 알려진 취약점.
단일 Rust 바이너리로 실행되며 런타임 종속성이 없습니다. 모든 8개 주요 패키지 에코시스템을 지원합니다. 그리고 설정은 보안을 위해 설계되었습니다: 프로젝트 디렉터리에서 읽지 않으며, CI를 위해 URL에서 로드 가능하며, 문제가 있을 때 명확한 오류 메시지를 제공합니다.