aina-scan 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aina_scan-2.0.0/.github/workflows/vibeguard.yml +21 -0
- aina_scan-2.0.0/LICENSE +21 -0
- aina_scan-2.0.0/PKG-INFO +267 -0
- aina_scan-2.0.0/README.de.md +125 -0
- aina_scan-2.0.0/README.es.md +125 -0
- aina_scan-2.0.0/README.ja.md +147 -0
- aina_scan-2.0.0/README.ko.md +207 -0
- aina_scan-2.0.0/README.md +241 -0
- aina_scan-2.0.0/README.zh.md +144 -0
- aina_scan-2.0.0/aina_scan/__init__.py +5 -0
- aina_scan-2.0.0/aina_scan/cli.py +570 -0
- aina_scan-2.0.0/aina_vibeguard/__init__.py +5 -0
- aina_scan-2.0.0/aina_vibeguard/cli.py +552 -0
- aina_scan-2.0.0/demo/_check_frame30.png +0 -0
- aina_scan-2.0.0/demo/_demo_run.ps1 +48 -0
- aina_scan-2.0.0/demo/analysis_A_aider_full_table.png +0 -0
- aina_scan-2.0.0/demo/analysis_B_agent_friendly.png +0 -0
- aina_scan-2.0.0/demo/analysis_C_vs_comparison.png +0 -0
- aina_scan-2.0.0/demo/analysis_D_end_card.png +0 -0
- aina_scan-2.0.0/demo/analysis_agent_friendly.png +0 -0
- aina_scan-2.0.0/demo/analysis_aider_scan_result.png +0 -0
- aina_scan-2.0.0/demo/analysis_comparison.png +0 -0
- aina_scan-2.0.0/demo/analysis_end_card.png +0 -0
- aina_scan-2.0.0/demo/analysis_scan_result.png +0 -0
- aina_scan-2.0.0/demo/analysis_vs_comparison.png +0 -0
- aina_scan-2.0.0/demo/demo.gif +0 -0
- aina_scan-2.0.0/demo/demo_en.gif +0 -0
- aina_scan-2.0.0/demo/demo_en_frame4.png +0 -0
- aina_scan-2.0.0/demo/demo_ko.gif +0 -0
- aina_scan-2.0.0/demo/demo_ko_check4.png +0 -0
- aina_scan-2.0.0/demo/demo_ko_check9.png +0 -0
- aina_scan-2.0.0/demo/demo_ko_frame4.png +0 -0
- aina_scan-2.0.0/demo/frame11.png +0 -0
- aina_scan-2.0.0/demo/frame5.png +0 -0
- aina_scan-2.0.0/demo/frame7.png +0 -0
- aina_scan-2.0.0/demo/frame8_scanresult.png +0 -0
- aina_scan-2.0.0/demo/frame9.png +0 -0
- aina_scan-2.0.0/demo/key_A_full_table.png +0 -0
- aina_scan-2.0.0/demo/key_B_agent_json.png +0 -0
- aina_scan-2.0.0/demo/key_C_comparison.png +0 -0
- aina_scan-2.0.0/demo/key_D_endcard.png +0 -0
- aina_scan-2.0.0/demo/make_gif.py +255 -0
- aina_scan-2.0.0/demo/make_gif_dual.py +296 -0
- aina_scan-2.0.0/demo/make_gif_real.py +228 -0
- aina_scan-2.0.0/demo/make_premium.py +501 -0
- aina_scan-2.0.0/demo/record_real.py +114 -0
- aina_scan-2.0.0/demo/vibeguard_premium.mp4 +0 -0
- aina_scan-2.0.0/demo/vibeguard_real.mp4 +0 -0
- aina_scan-2.0.0/pyproject.toml +38 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: VibeGuard Security Scan
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main, master]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
scan:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
name: Security Scan
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: VibeGuard — scan Python files
|
|
16
|
+
uses: Moonsehwan/aina-vibeguard-action@v1
|
|
17
|
+
continue-on-error: true # never breaks CI — advisory mode
|
|
18
|
+
with:
|
|
19
|
+
api-key: ${{ secrets.VIBEGUARD_KEY || 'vg_free_demo0001' }}
|
|
20
|
+
scan-path: 'aina_vibeguard'
|
|
21
|
+
fail-on-block: 'false' # report findings, don't gate merges
|
aina_scan-2.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AINA Sovereign
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
aina_scan-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aina-scan
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: AI-powered Python security scanner — 13 vuln types, AINA L3 causal chains, 100% recall
|
|
5
|
+
Project-URL: Homepage, https://github.com/Moonsehwan/aina-scan
|
|
6
|
+
Project-URL: Repository, https://github.com/Moonsehwan/aina-scan
|
|
7
|
+
Project-URL: Issues, https://github.com/Moonsehwan/aina-scan/issues
|
|
8
|
+
Author-email: AINA Sovereign <shanyshany3528@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: linter,python,sast,security,static-analysis,vulnerability
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Security
|
|
22
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
23
|
+
Requires-Python: >=3.9
|
|
24
|
+
Requires-Dist: requests>=2.28.0
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# aina-scan
|
|
28
|
+
|
|
29
|
+
[](https://pypi.org/project/aina-scan/)
|
|
30
|
+
[](https://pypi.org/project/aina-scan/)
|
|
31
|
+
[](LICENSE)
|
|
32
|
+
|
|
33
|
+
**AST-based security scanner for AI-generated Python code.**
|
|
34
|
+
|
|
35
|
+
> May flag false positives. Never misses a real one.
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
[한국어](README.ko.md) · [日本語](README.ja.md) · [中文](README.zh.md) · [Español](README.es.md) · [Deutsch](README.de.md)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Real Findings
|
|
44
|
+
|
|
45
|
+
Scanned top open-source AI coding tools. Found what others missed.
|
|
46
|
+
|
|
47
|
+
**serena** (25K ⭐) — AI coding assistant:
|
|
48
|
+
```
|
|
49
|
+
CRITICAL COMMAND_INJECTION agent.py:1222
|
|
50
|
+
subprocess.Popen(cmd, shell=True)
|
|
51
|
+
Attack path: config_tamper → shell_injection → server_compromise (p=97%)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**aider** (27K ⭐) — AI pair programmer:
|
|
55
|
+
```
|
|
56
|
+
CRITICAL COMMAND_INJECTION commands.py:974
|
|
57
|
+
subprocess.run("git " + user_input, shell=True)
|
|
58
|
+
Attack path: user_input → shell_injection → repo_compromise (p=94%)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**35 true positives. 0 false positives.**
|
|
62
|
+
Missed by Semgrep. Missed by the maintainers.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install aina-scan
|
|
70
|
+
aina-scan config --key YOUR_KEY
|
|
71
|
+
aina-scan scan agent.py
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Get a free API key → **[github.com/Moonsehwan/aina-scan](https://github.com/Moonsehwan/aina-scan)**
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Usage
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Scan a file
|
|
82
|
+
aina-scan scan agent.py
|
|
83
|
+
|
|
84
|
+
# Agent-friendly output — paste into Claude Code to auto-fix
|
|
85
|
+
aina-scan scan agent.py --agent-friendly
|
|
86
|
+
|
|
87
|
+
# Save full JSON report
|
|
88
|
+
aina-scan scan agent.py --report report.json
|
|
89
|
+
|
|
90
|
+
# Verify a fix worked
|
|
91
|
+
aina-scan scan agent.py
|
|
92
|
+
# ✅ 0 blocks found
|
|
93
|
+
|
|
94
|
+
# View scan history
|
|
95
|
+
aina-scan history
|
|
96
|
+
|
|
97
|
+
# Report false positive (auto-suppressed in next scan)
|
|
98
|
+
aina-scan feedback STUB_SKELETON --verdict fp --file agent.py
|
|
99
|
+
|
|
100
|
+
# Pattern statistics
|
|
101
|
+
aina-scan stats
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### `--agent-friendly` output
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"blocks": [{
|
|
109
|
+
"type": "COMMAND_INJECTION",
|
|
110
|
+
"severity": "CRITICAL",
|
|
111
|
+
"file": "agent.py",
|
|
112
|
+
"line": 1222,
|
|
113
|
+
"before_code": "subprocess.Popen(cmd, shell=True)",
|
|
114
|
+
"after_code": "subprocess.Popen(cmd.split(), shell=False)",
|
|
115
|
+
"verify": "aina-scan scan agent.py → 0 COMMAND_INJECTION",
|
|
116
|
+
"l3_chain": "config_tamper → shell_injection → server_compromise (p=97%)"
|
|
117
|
+
}],
|
|
118
|
+
"agent_instruction": "Fix all BLOCK items above. After each fix, verify. Report when all blocks are 0."
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Paste into Claude Code → automated fix loop. No manual steps.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## FP Feedback Loop
|
|
127
|
+
|
|
128
|
+
Report a false positive once → suppressed in all future scans for that file:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# 1. Scan → BLOCK found
|
|
132
|
+
aina-scan scan token_usage.py
|
|
133
|
+
# 🔴 BLOCKED HARDCODED_SECRET L47
|
|
134
|
+
|
|
135
|
+
# 2. Report as FP (e.g. it's a test fixture, not a real secret)
|
|
136
|
+
aina-scan feedback HARDCODED_SECRET --verdict fp --file token_usage.py
|
|
137
|
+
# ✅ Feedback recorded: FALSE POSITIVE
|
|
138
|
+
# → token_usage.py × HARDCODED_SECRET → next scan will downgrade BLOCK → WARN
|
|
139
|
+
|
|
140
|
+
# 3. Re-scan → BLOCK gone
|
|
141
|
+
aina-scan scan token_usage.py
|
|
142
|
+
# 🟡 WARN HARDCODED_SECRET [FP suppressed]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Per-user learning. Your FP profile stays with your API key.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## What It Detects
|
|
150
|
+
|
|
151
|
+
### Security (13 patterns)
|
|
152
|
+
|
|
153
|
+
| Pattern | Severity |
|
|
154
|
+
|---------|----------|
|
|
155
|
+
| `COMMAND_INJECTION` | CRITICAL |
|
|
156
|
+
| `PATH_TRAVERSAL` | CRITICAL |
|
|
157
|
+
| `SQL_INJECTION_RISK` | CRITICAL |
|
|
158
|
+
| `INSECURE_RANDOM` | CRITICAL |
|
|
159
|
+
| `WEAK_CRYPTO` | HIGH |
|
|
160
|
+
| `HARDCODED_SECRET` | HIGH |
|
|
161
|
+
| `EVAL_EXEC_RISK` | HIGH |
|
|
162
|
+
| `GOD_OBJECT` | HIGH |
|
|
163
|
+
| `BOUNDARY_MISSING` | MEDIUM |
|
|
164
|
+
| `STUB_SKELETON` | MEDIUM |
|
|
165
|
+
| `UNIFORM_RETURN` | MEDIUM |
|
|
166
|
+
| `DEEP_NESTING` | MEDIUM |
|
|
167
|
+
| `TRIVIAL_IF_CHAIN` | MEDIUM |
|
|
168
|
+
|
|
169
|
+
### Code Quality (7 patterns)
|
|
170
|
+
|
|
171
|
+
`DUPLICATE_FUNCTION` · `CIRCULAR_DEPENDENCY` · `N_PLUS_ONE_QUERY` · `MAGIC_NUMBER` · `MUTABLE_DEFAULT` · `EMPTY_EXCEPT` · `SHORT_PASSTHROUGH`
|
|
172
|
+
|
|
173
|
+
### Architecture (6 patterns — Pro)
|
|
174
|
+
|
|
175
|
+
`TAINT_FLOW` · `CROSS_FILE_INJECTION` · `UNSAFE_DESERIALIZATION` · `MISSING_ERROR_HANDLING` · `LOGIC_BOMB` · `RACE_CONDITION`
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## vs Semgrep vs Claude
|
|
180
|
+
|
|
181
|
+
| | aina-scan | Semgrep (free) | Claude (inline) |
|
|
182
|
+
|--|:---:|:---:|:---:|
|
|
183
|
+
| serena COMMAND_INJECTION | ✅ | ❌ | ❌ |
|
|
184
|
+
| aider COMMAND_INJECTION | ✅ | ❌ | ❌ |
|
|
185
|
+
| gpt-engineer PATH_TRAVERSAL | ✅ | ⚠️ partial | ❌ |
|
|
186
|
+
| Zero dependencies | ✅ | ❌ | ❌ |
|
|
187
|
+
| CI exit code | ✅ | ✅ | ❌ |
|
|
188
|
+
| Causal attack chain | ✅ | ❌ | ❌ |
|
|
189
|
+
| Agent-friendly output | ✅ | ❌ | ❌ |
|
|
190
|
+
| FP feedback loop | ✅ | ❌ | ❌ |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## GitHub Actions
|
|
195
|
+
|
|
196
|
+
```yaml
|
|
197
|
+
# .github/workflows/aina-scan.yml
|
|
198
|
+
name: AINA Scan Security Check
|
|
199
|
+
|
|
200
|
+
on: [pull_request]
|
|
201
|
+
|
|
202
|
+
jobs:
|
|
203
|
+
scan:
|
|
204
|
+
runs-on: ubuntu-latest
|
|
205
|
+
steps:
|
|
206
|
+
- uses: actions/checkout@v4
|
|
207
|
+
- name: Install aina-scan
|
|
208
|
+
run: pip install aina-scan
|
|
209
|
+
- name: Scan Python files
|
|
210
|
+
env:
|
|
211
|
+
AINA_SCAN_API_KEY: ${{ secrets.AINA_SCAN_KEY }}
|
|
212
|
+
run: |
|
|
213
|
+
find . -name "*.py" | head -20 | while read f; do
|
|
214
|
+
aina-scan scan "$f" || exit 1
|
|
215
|
+
done
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Add `AINA_SCAN_KEY` to **Settings → Secrets → Actions**.
|
|
219
|
+
PR fails automatically if security blocks are found.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Pricing
|
|
224
|
+
|
|
225
|
+
| | Free | Pro | Premium |
|
|
226
|
+
|--|:---:|:---:|:---:|
|
|
227
|
+
| Price | $0 | $19/mo Early Bird | $99/mo Early Bird |
|
|
228
|
+
| Files/day | 50 | Unlimited | Unlimited |
|
|
229
|
+
| Security patterns | 13 | 13 | 13 |
|
|
230
|
+
| Causal attack chains | ❌ | ✅ | ✅ |
|
|
231
|
+
| Scan history | ❌ | ✅ | ✅ |
|
|
232
|
+
| FP feedback | ❌ | ✅ | ✅ |
|
|
233
|
+
| Project scan | ❌ | ❌ | ✅ |
|
|
234
|
+
| Taint flow analysis | ❌ | ❌ | ✅ |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## FAQ
|
|
239
|
+
|
|
240
|
+
**Q: Does it send my code to a server?**
|
|
241
|
+
A: Only the scanned file is sent. No code is stored permanently.
|
|
242
|
+
|
|
243
|
+
**Q: False positive rate?**
|
|
244
|
+
A: ~3% on abstract base class patterns. The FP feedback loop (`--verdict fp`) suppresses them per-user immediately.
|
|
245
|
+
|
|
246
|
+
**Q: How is it different from `bandit`?**
|
|
247
|
+
A: bandit uses regex patterns. aina-scan uses AST analysis with causal chain tracing. Bandit missed both serena and aider findings.
|
|
248
|
+
|
|
249
|
+
**Q: Works offline?**
|
|
250
|
+
A: Requires API call. Free tier: 50 files/day.
|
|
251
|
+
|
|
252
|
+
**Q: How does detection work?**
|
|
253
|
+
A: Black-box API. Core logic runs server-side.
|
|
254
|
+
|
|
255
|
+
**Q: Migrating from aina-vibeguard?**
|
|
256
|
+
A: `pip install aina-scan`. Your old `VIBEGUARD_API_KEY` env var still works. Config key is auto-migrated.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Contact
|
|
261
|
+
|
|
262
|
+
- Issues: [github.com/Moonsehwan/aina-scan/issues](https://github.com/Moonsehwan/aina-scan/issues)
|
|
263
|
+
- Email: shanyshany3528@gmail.com
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
MIT License · CLI source only · Core engine proprietary (server-side)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# aina-vibeguard
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/aina-vibeguard/)
|
|
4
|
+
[](https://pypi.org/project/aina-vibeguard/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**AST-basierter Sicherheitsscanner für KI-generierten Python-Code.**
|
|
8
|
+
|
|
9
|
+
> Kann Falschalarme auslösen. Verpasst nie eine echte Schwachstelle.
|
|
10
|
+
|
|
11
|
+
[English](README.md) · [한국어](README.ko.md) · [日本語](README.ja.md) · [中文](README.zh.md) · [Español](README.es.md)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Echte Funde
|
|
16
|
+
|
|
17
|
+
Wir haben die wichtigsten Open-Source-KI-Programmiertools gescannt.
|
|
18
|
+
|
|
19
|
+
**serena** (25K ⭐) — KI-Coding-Assistent:
|
|
20
|
+
```
|
|
21
|
+
CRITICAL COMMAND_INJECTION agent.py:1222
|
|
22
|
+
subprocess.Popen(cmd, shell=True)
|
|
23
|
+
Angriffspfad: config_tamper → shell_injection → server_compromise (p=97%)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**aider** (27K ⭐) — KI-Pair-Programmer:
|
|
27
|
+
```
|
|
28
|
+
CRITICAL COMMAND_INJECTION commands.py:974
|
|
29
|
+
subprocess.run("git " + user_input, shell=True)
|
|
30
|
+
Angriffspfad: user_input → shell_injection → repo_compromise (p=94%)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**35 echte Positive. 0 Falschalarme.**
|
|
34
|
+
Von Semgrep übersehen. Von den Entwicklern nicht bemerkt.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install aina-vibeguard
|
|
42
|
+
aina-vibeguard config --key YOUR_KEY
|
|
43
|
+
aina-vibeguard scan agent.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Kostenloser API-Schlüssel → **[github.com/Moonsehwan/aina-vibeguard](https://github.com/Moonsehwan/aina-vibeguard)**
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Verwendung
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Datei scannen
|
|
54
|
+
aina-vibeguard scan agent.py
|
|
55
|
+
|
|
56
|
+
# Agenten-freundliche Ausgabe — in Claude Code einfügen für automatische Korrektur
|
|
57
|
+
aina-vibeguard scan agent.py --agent-friendly
|
|
58
|
+
|
|
59
|
+
# JSON-Bericht speichern
|
|
60
|
+
aina-vibeguard scan agent.py --report report.json
|
|
61
|
+
|
|
62
|
+
# Korrektur überprüfen
|
|
63
|
+
aina-vibeguard scan agent.py
|
|
64
|
+
# ✅ 0 blocks found
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Erkannte Muster
|
|
70
|
+
|
|
71
|
+
### Sicherheit (13 Muster)
|
|
72
|
+
|
|
73
|
+
| Muster | Schweregrad |
|
|
74
|
+
|--------|-------------|
|
|
75
|
+
| `COMMAND_INJECTION` | CRITICAL |
|
|
76
|
+
| `PATH_TRAVERSAL` | CRITICAL |
|
|
77
|
+
| `SQL_INJECTION_RISK` | CRITICAL |
|
|
78
|
+
| `INSECURE_RANDOM` | CRITICAL |
|
|
79
|
+
| `WEAK_CRYPTO` | HIGH |
|
|
80
|
+
| `HARDCODED_SECRET` | HIGH |
|
|
81
|
+
| `EVAL_EXEC_RISK` | HIGH |
|
|
82
|
+
| `GOD_OBJECT` | HIGH |
|
|
83
|
+
| `BOUNDARY_MISSING` | MEDIUM |
|
|
84
|
+
| `STUB_SKELETON` | MEDIUM |
|
|
85
|
+
| `UNIFORM_RETURN` | MEDIUM |
|
|
86
|
+
| `DEEP_NESTING` | MEDIUM |
|
|
87
|
+
| `TRIVIAL_IF_CHAIN` | MEDIUM |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## GitHub Actions
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
on: [pull_request]
|
|
95
|
+
|
|
96
|
+
jobs:
|
|
97
|
+
scan:
|
|
98
|
+
runs-on: ubuntu-latest
|
|
99
|
+
steps:
|
|
100
|
+
- uses: actions/checkout@v4
|
|
101
|
+
- uses: Moonsehwan/aina-vibeguard-action@v1
|
|
102
|
+
with:
|
|
103
|
+
api-key: ${{ secrets.VIBEGUARD_KEY }}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Preise
|
|
109
|
+
|
|
110
|
+
| | Kostenlos | Pro | Premium |
|
|
111
|
+
|--|:---:|:---:|:---:|
|
|
112
|
+
| Preis | $0 | $19/Monat Early Bird | $99/Monat Early Bird |
|
|
113
|
+
| Dateien/Tag | 50 | Unbegrenzt | Unbegrenzt |
|
|
114
|
+
| Kausale Angriffsketten | ❌ | ✅ | ✅ |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Kontakt
|
|
119
|
+
|
|
120
|
+
Email: Aina.vibeguard@gmail.com
|
|
121
|
+
Issues: [github.com/Moonsehwan/aina-vibeguard/issues](https://github.com/Moonsehwan/aina-vibeguard/issues)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
MIT-Lizenz · Nur CLI-Quellcode · Kern-Engine proprietär (serverseitig)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# aina-vibeguard
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/aina-vibeguard/)
|
|
4
|
+
[](https://pypi.org/project/aina-vibeguard/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**Escáner de seguridad AST para código Python generado por IA.**
|
|
8
|
+
|
|
9
|
+
> Puede generar falsos positivos. Nunca pierde una vulnerabilidad real.
|
|
10
|
+
|
|
11
|
+
[English](README.md) · [한국어](README.ko.md) · [日本語](README.ja.md) · [中文](README.zh.md) · [Deutsch](README.de.md)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Hallazgos Reales
|
|
16
|
+
|
|
17
|
+
Escaneamos las principales herramientas de programación con IA.
|
|
18
|
+
|
|
19
|
+
**serena** (25K ⭐) — Asistente de programación IA:
|
|
20
|
+
```
|
|
21
|
+
CRITICAL COMMAND_INJECTION agent.py:1222
|
|
22
|
+
subprocess.Popen(cmd, shell=True)
|
|
23
|
+
Ruta de ataque: config_tamper → shell_injection → server_compromise (p=97%)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**aider** (27K ⭐) — Programador en pareja con IA:
|
|
27
|
+
```
|
|
28
|
+
CRITICAL COMMAND_INJECTION commands.py:974
|
|
29
|
+
subprocess.run("git " + user_input, shell=True)
|
|
30
|
+
Ruta de ataque: user_input → shell_injection → repo_compromise (p=94%)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**35 verdaderos positivos. 0 falsos positivos.**
|
|
34
|
+
Semgrep no lo detectó. Los mantenedores tampoco.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Instalación
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install aina-vibeguard
|
|
42
|
+
aina-vibeguard config --key YOUR_KEY
|
|
43
|
+
aina-vibeguard scan agent.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Clave API gratuita → **[github.com/Moonsehwan/aina-vibeguard](https://github.com/Moonsehwan/aina-vibeguard)**
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Uso
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Escanear archivo
|
|
54
|
+
aina-vibeguard scan agent.py
|
|
55
|
+
|
|
56
|
+
# Salida amigable para agentes — pegar en Claude Code para corrección automática
|
|
57
|
+
aina-vibeguard scan agent.py --agent-friendly
|
|
58
|
+
|
|
59
|
+
# Guardar reporte JSON
|
|
60
|
+
aina-vibeguard scan agent.py --report report.json
|
|
61
|
+
|
|
62
|
+
# Verificar corrección
|
|
63
|
+
aina-vibeguard scan agent.py
|
|
64
|
+
# ✅ 0 blocks found
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Patrones Detectados
|
|
70
|
+
|
|
71
|
+
### Seguridad (13 patrones)
|
|
72
|
+
|
|
73
|
+
| Patrón | Severidad |
|
|
74
|
+
|--------|-----------|
|
|
75
|
+
| `COMMAND_INJECTION` | CRITICAL |
|
|
76
|
+
| `PATH_TRAVERSAL` | CRITICAL |
|
|
77
|
+
| `SQL_INJECTION_RISK` | CRITICAL |
|
|
78
|
+
| `INSECURE_RANDOM` | CRITICAL |
|
|
79
|
+
| `WEAK_CRYPTO` | HIGH |
|
|
80
|
+
| `HARDCODED_SECRET` | HIGH |
|
|
81
|
+
| `EVAL_EXEC_RISK` | HIGH |
|
|
82
|
+
| `GOD_OBJECT` | HIGH |
|
|
83
|
+
| `BOUNDARY_MISSING` | MEDIUM |
|
|
84
|
+
| `STUB_SKELETON` | MEDIUM |
|
|
85
|
+
| `UNIFORM_RETURN` | MEDIUM |
|
|
86
|
+
| `DEEP_NESTING` | MEDIUM |
|
|
87
|
+
| `TRIVIAL_IF_CHAIN` | MEDIUM |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## GitHub Actions
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
on: [pull_request]
|
|
95
|
+
|
|
96
|
+
jobs:
|
|
97
|
+
scan:
|
|
98
|
+
runs-on: ubuntu-latest
|
|
99
|
+
steps:
|
|
100
|
+
- uses: actions/checkout@v4
|
|
101
|
+
- uses: Moonsehwan/aina-vibeguard-action@v1
|
|
102
|
+
with:
|
|
103
|
+
api-key: ${{ secrets.VIBEGUARD_KEY }}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Precios
|
|
109
|
+
|
|
110
|
+
| | Gratis | Pro | Premium |
|
|
111
|
+
|--|:---:|:---:|:---:|
|
|
112
|
+
| Precio | $0 | $19/mes Early Bird | $99/mes Early Bird |
|
|
113
|
+
| Archivos/día | 50 | Ilimitado | Ilimitado |
|
|
114
|
+
| Cadenas causales | ❌ | ✅ | ✅ |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Contacto
|
|
119
|
+
|
|
120
|
+
Email: Aina.vibeguard@gmail.com
|
|
121
|
+
Issues: [github.com/Moonsehwan/aina-vibeguard/issues](https://github.com/Moonsehwan/aina-vibeguard/issues)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
Licencia MIT · Solo fuente CLI · Motor principal propietario (lado del servidor)
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# aina-vibeguard
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/aina-vibeguard/)
|
|
4
|
+
[](https://pypi.org/project/aina-vibeguard/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**AIが生成したPythonコードのためのASTベースセキュリティスキャナー。**
|
|
8
|
+
|
|
9
|
+
> 誤検知がある場合があります。実際の脆弱性は絶対に見逃しません。
|
|
10
|
+
|
|
11
|
+
[English](README.md) · [한국어](README.ko.md) · [中文](README.zh.md) · [Español](README.es.md) · [Deutsch](README.de.md)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 実際の発見事例
|
|
16
|
+
|
|
17
|
+
主要なオープンソースAIコーディングツールをスキャンしました。
|
|
18
|
+
|
|
19
|
+
**serena** (25K ⭐) — AIコーディングアシスタント:
|
|
20
|
+
```
|
|
21
|
+
CRITICAL COMMAND_INJECTION agent.py:1222
|
|
22
|
+
subprocess.Popen(cmd, shell=True)
|
|
23
|
+
攻撃経路: config_tamper → shell_injection → server_compromise (p=97%)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**aider** (27K ⭐) — AIペアプログラマー:
|
|
27
|
+
```
|
|
28
|
+
CRITICAL COMMAND_INJECTION commands.py:974
|
|
29
|
+
subprocess.run("git " + user_input, shell=True)
|
|
30
|
+
攻撃経路: user_input → shell_injection → repo_compromise (p=94%)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**真陽性35件。偽陽性0件。**
|
|
34
|
+
Semgrepも見逃しました。メンテナーも気づきませんでした。
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## インストール
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install aina-vibeguard
|
|
42
|
+
aina-vibeguard config --key YOUR_KEY
|
|
43
|
+
aina-vibeguard scan agent.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
無料APIキー → **[github.com/Moonsehwan/aina-vibeguard](https://github.com/Moonsehwan/aina-vibeguard)**
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 使い方
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# ファイルをスキャン
|
|
54
|
+
aina-vibeguard scan agent.py
|
|
55
|
+
|
|
56
|
+
# エージェントフレンドリー出力 — Claude Codeに貼り付けて自動修正
|
|
57
|
+
aina-vibeguard scan agent.py --agent-friendly
|
|
58
|
+
|
|
59
|
+
# JSONレポート保存
|
|
60
|
+
aina-vibeguard scan agent.py --report report.json
|
|
61
|
+
|
|
62
|
+
# 修正を確認
|
|
63
|
+
aina-vibeguard scan agent.py
|
|
64
|
+
# ✅ 0 blocks found
|
|
65
|
+
|
|
66
|
+
# スキャン履歴
|
|
67
|
+
aina-vibeguard history
|
|
68
|
+
|
|
69
|
+
# 誤検知を報告
|
|
70
|
+
aina-vibeguard feedback STUB_SKELETON --verdict fp --file agent.py
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 検出項目
|
|
76
|
+
|
|
77
|
+
### セキュリティ (13パターン)
|
|
78
|
+
|
|
79
|
+
| パターン | 深刻度 |
|
|
80
|
+
|---------|--------|
|
|
81
|
+
| `COMMAND_INJECTION` | CRITICAL |
|
|
82
|
+
| `PATH_TRAVERSAL` | CRITICAL |
|
|
83
|
+
| `SQL_INJECTION_RISK` | CRITICAL |
|
|
84
|
+
| `INSECURE_RANDOM` | CRITICAL |
|
|
85
|
+
| `WEAK_CRYPTO` | HIGH |
|
|
86
|
+
| `HARDCODED_SECRET` | HIGH |
|
|
87
|
+
| `EVAL_EXEC_RISK` | HIGH |
|
|
88
|
+
| `GOD_OBJECT` | HIGH |
|
|
89
|
+
| `BOUNDARY_MISSING` | MEDIUM |
|
|
90
|
+
| `STUB_SKELETON` | MEDIUM |
|
|
91
|
+
| `UNIFORM_RETURN` | MEDIUM |
|
|
92
|
+
| `DEEP_NESTING` | MEDIUM |
|
|
93
|
+
| `TRIVIAL_IF_CHAIN` | MEDIUM |
|
|
94
|
+
|
|
95
|
+
### コード品質 (7パターン)
|
|
96
|
+
|
|
97
|
+
`DUPLICATE_FUNCTION` · `CIRCULAR_DEPENDENCY` · `N_PLUS_ONE_QUERY` · `MAGIC_NUMBER` · `MUTABLE_DEFAULT` · `EMPTY_EXCEPT` · `SHORT_PASSTHROUGH`
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Semgrep・Claude比較
|
|
102
|
+
|
|
103
|
+
| | aina-vibeguard | Semgrep (無料) | Claude (インライン) |
|
|
104
|
+
|--|:---:|:---:|:---:|
|
|
105
|
+
| serena COMMAND_INJECTION | ✅ | ❌ | ❌ |
|
|
106
|
+
| aider COMMAND_INJECTION | ✅ | ❌ | ❌ |
|
|
107
|
+
| 依存関係なし | ✅ | ❌ | ❌ |
|
|
108
|
+
| CI終了コード | ✅ | ✅ | ❌ |
|
|
109
|
+
| 因果攻撃チェーン | ✅ | ❌ | ❌ |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## GitHub Actions
|
|
114
|
+
|
|
115
|
+
```yaml
|
|
116
|
+
on: [pull_request]
|
|
117
|
+
|
|
118
|
+
jobs:
|
|
119
|
+
scan:
|
|
120
|
+
runs-on: ubuntu-latest
|
|
121
|
+
steps:
|
|
122
|
+
- uses: actions/checkout@v4
|
|
123
|
+
- uses: Moonsehwan/aina-vibeguard-action@v1
|
|
124
|
+
with:
|
|
125
|
+
api-key: ${{ secrets.VIBEGUARD_KEY }}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 料金
|
|
131
|
+
|
|
132
|
+
| | 無料 | Pro | Premium |
|
|
133
|
+
|--|:---:|:---:|:---:|
|
|
134
|
+
| 価格 | $0 | $19/月 (Early Bird) | $99/月 (Early Bird) |
|
|
135
|
+
| ファイル/日 | 50 | 無制限 | 無制限 |
|
|
136
|
+
| 因果攻撃チェーン | ❌ | ✅ | ✅ |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## お問い合わせ
|
|
141
|
+
|
|
142
|
+
Email: Aina.vibeguard@gmail.com
|
|
143
|
+
Issues: [github.com/Moonsehwan/aina-vibeguard/issues](https://github.com/Moonsehwan/aina-vibeguard/issues)
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
MITライセンス · CLIソースのみ公開 · コアエンジンはサーバー専用
|