curl -L -o env-secrets-vault.skill "https://aiskillstore.io/v1/agent/skills/0e68967f-a934-400a-a752-0a31598a1de3/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "0e68967f-a934-400a-a752-0a31598a1de3",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Encrypt, decrypt, rotate, audit, and validate .env secrets locally using AES-256-GCM (Fernet). Zero secret exposure in logs or stdout.
Compatible Platforms any
🚨 Security risks detected:
Findings: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)"]
AI Review Stage
제출된 스킬 패키지 'env-secrets-vault'에 대한 보안 검수 결과, 다음과 같은 판단을 내렸습니다. 1. **선언된 권한(permissions) 일치 여부:** * 메타데이터에 `network: false`, `filesystem: false`, `subprocess: false`, `env_vars: []`로 매우 제한적인 권한이 선언되어 있습니다. * `main.py` 및 `lib/vault.py` 코드 파일을 분석한 결과, 네트워크 통신(예: `requests`, `socket`), 파일 시스템 접근(예: `open`, `os.path`), 서브프로세스 실행(예: `subprocess`, `os.system`)과 관련된 어떠한 코드도 발견되지 않았습니다. 스킬은 표준 입출력(stdin/stdout)을 통해서만 데이터를 주고받으며, 모든 작업은 메모리 내에서 이루어집니다. 이는 선언된 권한과 완벽하게 일치합니다. 2. **악의적 목적의 코드 여부:** * 코드에서 사용자 데이터를 무단으로 탈취하거나, 시스템을 파괴하거나, 난독화된 코드를 사용하는 흔적은 발견되지 않았습니다. * 정적 분석 결과에서 `main.py: __import__(` 플래그가 발견되었으나, 코드 검토 결과 이는 `from lib.vault import ...`와 같이 파이썬의 표준 모듈 임포트 구문에서 내부적으로 `__import__` 함수가 사용되는 것을 정적 분석기가 오탐한 것으로 판단됩니다. 실제 코드에서는 동적이거나 사용자 입력에 기반한 `__import__` 호출은 없으며, `cryptography`와 같은 신뢰할 수 있는 라이브러리를 명시적으로 임포트하여 사용하고 있습니다. 따라서 이는 오탐(false positive)으로 간주합니다. 3. **선언되지 않은 외부 통신 여부:** * `network: false`로 선언되었으며, 코드에서 외부 네트워크로 데이터를 전송하거나 수신하는 어떠한 시도도 발견되지 않았습니다. 4. **사용자 데이터 무단 수집/전송 여부:** * 스킬의 목적 자체가 사용자의 `.env` 시크릿을 암호화/복호화하는 것이지만, 이 과정에서 데이터를 외부로 전송하거나 영구적으로 저장하는 기능은 없습니다. 모든 작업은 입력된 데이터를 기반으로 메모리에서 처리되며, 결과는 표준 출력으로 반환됩니다. 따라서 사용자 데이터를 무단으로 수집하거나 전송하지 않습니다. 5. **코드 품질 및 목적 일치 여부:** * 암호화/복호화 로직은 파이썬의 표준적이고 보안이 검증된 `cryptography` 라이브러리의 `Fernet` 방식을 사용합니다. Fernet은 AES-128-CBC와 HMAC-SHA256을 결합한 인증된 암호화(Authenticated Encryption)를 제공하여 안전성이 높습니다. * `.env` 파일 파싱, 키 생성, 데이터 직렬화/역직렬화 등 보조 기능들도 잘 구현되어 있으며, 입력 유효성 검사 및 오류 처리도 명확하게 정의되어 있습니다. * 코드 가독성이 높고, 스킬의 보안 관련 목적에 부합하는 높은 품질을 보여줍니다. **결론:** 'env-secrets-vault' 스킬은 선언된 권한을 철저히 준수하며, 악의적인 코드나 보안 취약점이 발견되지 않았습니다. 핵심 암호화 로직은 신뢰할 수 있는 라이브러리를 사용하여 안전하게 구현되었으며, 사용자 데이터를 안전하게 처리하는 데 중점을 둡니다. 정적 분석의 `__import__` 플래그는 오탐으로 확인되었습니다. 따라서 이 스킬은 안전하다고 판단되어 승인합니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
Encrypt plain .env content and get back an encrypted vault + master key
{
"action": "encrypt",
"env_content": "API_KEY=abc123\nDB_PASSWORD=secret456\nSMTP_HOST=mail.example.com"
}
{
"key_count": 3,
"master_key": "Fernet key \u2014 44-char urlsafe-base64 string (store separately)",
"ok": true,
"vault_content": "gAAAAAB... (encrypted base64 payload)"
}
Decrypt vault and get key-value dict for runtime injection
{
"action": "decrypt",
"inject_env": true,
"master_key": "Fernet key \u2014 44-char urlsafe-base64 string",
"vault_content": "gAAAAAB... (encrypted base64 payload)"
}
{
"env_vars": {
"API_KEY": "abc123",
"DB_PASSWORD": "secret456",
"SMTP_HOST": "mail.example.com"
},
"key_count": 3,
"ok": true
}
View key names and metadata without decrypting values
{
"action": "audit",
"master_key": "Fernet key \u2014 44-char urlsafe-base64 string",
"vault_content": "gAAAAAB... (encrypted base64 payload)"
}
{
"audit": {
"keys": [
{
"created_at": "2026-05-14T12:00:00Z",
"name": "API_KEY",
"value_length": 6
},
{
"created_at": "2026-05-14T12:00:00Z",
"name": "DB_PASSWORD",
"value_length": 9
},
{
"created_at": "2026-05-14T12:00:00Z",
"name": "SMTP_HOST",
"value_length": 17
}
]
},
"key_count": 3,
"ok": true
}
Re-encrypt vault with a new master key (old key discarded)
{
"action": "rotate",
"master_key": "Old Fernet key \u2014 44-char urlsafe-base64 string",
"vault_content": "gAAAAAB... (encrypted base64 payload)"
}
{
"key_count": 3,
"master_key": "New Fernet key \u2014 44-char urlsafe-base64 string",
"ok": true,
"vault_content": "gAAAAAB... (new encrypted payload)"
}
Verify vault can be decrypted and is not corrupted
{
"action": "validate",
"master_key": "Fernet key \u2014 44-char urlsafe-base64 string",
"vault_content": "gAAAAAB... (encrypted base64 payload)"
}
{
"key_count": 3,
"ok": true,
"valid": true
}
Returns structured error when master key does not match vault
{
"action": "decrypt",
"master_key": "WrongKey_44chars_urlsafe_base64_padding_xxx=",
"vault_content": "gAAAAAB... (encrypted base64 payload)"
}
{
"error": {
"code": "DECRYPTION_FAILED",
"message": "Decryption failed: invalid key or corrupted vault"
},
"ok": false
}
Returns error when master_key is not provided for decrypt
{
"action": "decrypt",
"vault_content": "gAAAAAB..."
}
{
"error": {
"code": "MISSING_MASTER_KEY",
"message": "Field \u0027master_key\u0027 is required for action \u0027decrypt\u0027"
},
"ok": false
}
Returns error when env_content is empty or has no valid KEY=VALUE lines
{
"action": "encrypt",
"env_content": "# just a comment\n\n"
}
{
"error": {
"code": "EMPTY_ENV",
"message": "No valid KEY=VALUE pairs found in env_content"
},
"ok": false
}
All examples are also available via the agent API:
/v1/agent/skills/0e68967f-a934-400a-a752-0a31598a1de3/schema
No reviews yet. Be the first to leave one!