컨트랙트는 배포하기 전에 읽으십니다. skill도 설치하기 전에 읽어야 합니다. 한 줄로 설치되는 설정 파일 하나가 shell을 열고, 자격 증명 저장소를 읽고, 그것을 어딘가로 보낼 수 있습니다 — 렌더링된 README에서는 그중 아무것도 보이지 않습니다. 이 도구는 구조적으로 위험한 21종의 패턴을 점검합니다. 컨트랙트 감사가 아니며, 모든 결과에 그렇게 적혀 있습니다.
위험은 누군가의 동기를 추측하는 데 있지 않고 이 설정의 형태에 있습니다. 어떤 규칙이 도는지는 파일명이 정합니다 — 이런 작성 방식을 인용하기만 한 산문은 설정 전용 규칙을 건드리지 않습니다.
shell을 MCP 명령으로 삼는 것. 다운로드를 shell로 곧장 파이프하는 것. /나 ~를 뿌리로 삼는 재귀 삭제. 인자로 샌드박스와 권한 확인을 꺼 버리는 것. 임시 디렉터리에서 실행 파일을 참조하는 것 — 그 기계의 무엇이든 덮어쓸 수 있는 곳에서요.
아직 유효한 API 키와 개인키 자료를, 공유되고 설치되는 파일에 커밋하는 것. 에이전트를 ~/.ssh, ~/.aws, .env로 향하게 하는 것 — 옆에 외부로 나가는 능력이 하나라도 있다면 그것은 완결된 유출 경로입니다.
일회용 수집 엔드포인트. 설정에 박아 넣은 채팅 webhook — 본질적으로 URL에 적힌 쓰기 자격 증명입니다. 파일 내용, 환경 변수, 대화를 원격 주소로 보내라고 에이전트에게 지시하는 것.
지시 덮어쓰기. 정체성 재설정. HTML 주석 안에 숨긴 명령문 — 렌더링된 화면에서는 보이지 않지만 모델에게는 완전히 보입니다. 폭이 0인 문자와 양방향 오버라이드 문자 — 검토자가 읽는 문서와 모델이 받는 문서를 서로 다른 두 문서로 만들어 버립니다.
와일드카드 명령 승인. 그 순간부터 화이트리스트는 더 이상 화이트리스트가 아닙니다. 그리고 확인 없이 행동하라고 에이전트에게 지시하는 것 — 주입된 지시가 힘을 발휘하려면 정확히 그 상태가 필요합니다.
시작할 때마다 설치되고 실행되는, 버전이 고정되지 않은 패키지. 특정 커밋이 아니라 브랜치에서 코드를 가져오는 것 — 그래서 검토된 것과 실행되는 것 사이에 푸시 한 번의 차이만 남습니다.
도구 자체(스캐너, 콘솔, SAFI 워크스페이스)의 화면은 아직 영어입니다. 이 페이지들은 그 안으로 들어가기 전에 무엇을 하게 되는지 한국어로 끝까지 설명해 드립니다.
다른 무엇보다 먼저 말해야 할 만큼 중요합니다. 둘이 같은 사이트에 살고 있고, 한쪽의 스크린숏이 다른 쪽으로 오해되어서는 절대 안 되기 때문입니다.
이 패턴들이 하나도 나타나지 않았다는 뜻입니다. 이 파일을 안심하고 실행해도 된다는 뜻이 아닙니다.
어떤 skill은 알려진 패턴에 하나도 걸리지 않으면서 악의로 가득할 수 있습니다. 설치하시는 것을 읽어 보세요.
Solidity 엔진은 명세와 타입 시스템을 가진 언어를 다루고, '이 함수는 자금을 옮기며 누구나 호출할 수 있다'는 판정 가능한 성질입니다. 그래서 점수를 냅니다.
이 스캐너는 산문과 JSON 속 패턴을 맞춰 봅니다. skill을 위험하게 만드는 것은 의도이고, 의도는 판정할 수 없습니다. 그래서 통과/경고/실패를 내고, 의도적으로 점수를 매기지 않습니다.
텍스트를 읽고, 맞춰 보고, 버립니다. 어떤 기록도, 캐시도, 그것을 담은 로그 한 줄도 없습니다.
이 페이지는 한 번에 파일 하나를 읽으며 최대 128KB입니다. 어떤 규칙이 도는지는 파일명이 정하므로, 이런 작성 방식을 인용하기만 한 설명 문서가 오탐으로 잡히지 않습니다.
같은 규칙 묶음이 명령줄 도구로도 배포됩니다. 디렉터리 전체를 순회하고, API 키가 필요 없으며, 어디로도 아무것도 보내지 않습니다: npx saferico skill ./my-skill.
scan_agent_config MCP 도구는 무언가를 설치하려는 에이전트에게 같은 규칙 묶음을 노출합니다 — 그래서 점검이 파일을 신뢰한 뒤가 아니라 그 전에 일어납니다.