Scanner-Scorecard · Korpus v1 · statische Modi · 2. November 2026
Der statische Score folgt der Paketgröße, nicht der Absicht
Wir haben zwei Open-Source-Sicherheitsscanner für KI-Agent-Skills — NVIDIA SkillSpector und Ciscos skill-scanner — über 186 echte Skills in vier Sprachen und 40 entschärfte Angriffsmuster laufen lassen. Alles Folgende zitiert die Ausgabe der Engines selbst.
Andrey Trukhachevskillverdict.devDaten: CC BY 4.0Code: Apache-2.02 000 Wörter
Ein Agent-Skill ist eine SKILL.md mit Anweisungen für einen Coding-Agenten, meist mit Skripten und Referenzdateien daneben. Menschen — und immer öfter die Agenten selbst — installieren Skills direkt von GitHub. Zwei Open-Source-Scanner bieten vor der Installation ein Urteil an: SkillSpector (NVIDIA; statische Muster, AST, YARA, OSV, optionaler LLM-Durchlauf) und skill-scanner (Cisco AI Defense; statische Analysatoren, YARA, optionaler LLM-Durchlauf).
Wir haben eine enge Frage gestellt: Wie sehen diese Urteile auf gewöhnlichen, veröffentlichten Skills aus — und ändert sich die Antwort mit der Sprache, in der der Skill geschrieben ist?
Korpus. 146 legitime Skills, gefunden über die GitHub-Codesuche nach sprachspezifischen Formulierungen, dedupliziert (höchstens drei pro Repository, Autoren rotierend), auf einen Commit-SHA festgeschrieben, mit angegebener Lizenz: 39 englische, 38 russische, 30 deutsche, 39 chinesische. Dazu 40 synthetische Angriffsmuster: zehn Muster (Anweisungsübernahme im Text, versteckte Anweisung im HTML-Kommentar, Exfiltration, curl | bash, Sammeln von Umgebungsvariablen, gefälschter Installer, Base64-Shell, Zero-Width-Zeichen, Scope Creep, Persistenz), in allen vier Sprachen identisch geschrieben und entschärft. Legitim heißt hier mit Lizenz und geprüfter Herkunft veröffentlicht; auditiert haben wir sie nicht.
Engines. SkillSpector 2.12.0 mit --no-llm; Cisco skill-scanner 2.3.2 mit --policy balanced und --policy quiet, ohne LLM. Die Versionen sind in engines.lock.yaml festgeschrieben. LLM-gestützte Modi wurden nicht ausgeführt; sie sind der nächste Schritt und werden separat berichtet. Als Kontrolle haben wir einen eigenen 60-zeiligen Prüfer für versteckte Zeichen ergänzt; er steht in den Tabellen, weil er ebenfalls Fehlalarme produziert hat und wir keinen Grund sehen, das zu verbergen.
All das — Manifest, Skripte, Ergebnisse — liegt im Benchmark-Repository und lässt sich mit drei Befehlen reproduzieren.
§2 Der statische Score folgt der Paketgröße
SkillSpector verdichtet seine Befunde zu einem Score von 0 bis 100 und einer Empfehlung: SAFE bis 20, CAUTION bis 50, DO NOT INSTALL darüber. Der stärkste Prädiktor dieses Scores in unserem Korpus ist nicht, was der Skill tut, sondern wie viele Code-Dateien neben der SKILL.md liegen.
Abbildung 1 Statischer SkillSpector-Score nach Menge des mitgelieferten Codes. Jeder Punkt ist ein Paket; der Strich ist der Median der legitimen Skills in diesem Band. Punkt überfahren zeigt die ID. 178 Pakete; 8 große wurden nicht fertig (§6).
Code-Dateien im Paket
n
Median-Score
SAFE
DO NOT INSTALL
Markdown only (0 code files)
60
8
48
8
1-5 code files
35
41
6
15
6-30 code files
27
100
0
23
more than 30 code files
16
100
0
15
Keiner der 43 legitimen Skills mit sechs oder mehr Code-Dateien wurde als SAFE eingestuft; 38 davon erhielten DO NOT INSTALL. Die 40 Angriffsmuster — je eine SKILL.md und höchstens ein Skript — erreichten einen Median von 29 und ein Maximum von 51. Nur eines der zehn Muster kam in irgendeiner Sprache auf DO NOT INSTALL. Ein legitimer englischer Skill mit scripts/-Ordner wird schlechter bewertet als ein Ein-Datei-Muster, das Zugangsdaten liest und an eine URL schickt.
Ciscos Ausgabe zeigt in dieselbe Richtung, mit kleinerem Ausschlag. Seine häufigsten Befunde ab MEDIUM auf legitimen Skills — DATA_EXFIL_NETWORK_REQUESTS, DATA_EXFIL_JS_NETWORK, UNANALYZABLE_BINARY, COMMAND_INJECTION_* — werden alle durch mitgelieferten Code ausgelöst, nicht durch die Anweisungen.
Das ist für alles Weitere wichtig: Die vier Sprachgruppen unterscheiden sich stark darin, wie viel Code sie mitbringen. Russische und deutsche Skills in freier Wildbahn sind meist reines Markdown; englische und chinesische tragen Skripte, manchmal ganze Anwendungen. Jede Zahl pro Sprache muss mit diesem Vorbehalt gelesen werden — weshalb §4 nur Befunde betrachtet, die in Markdown liegen.
§3 Urteile nach Sprache
Was ein Nutzer sieht, ist das Urteil, also zählen wir es zuerst: den Anteil legitimer Skills, die die Engine selbst nicht als SAFE eingestuft hat (SkillSpector: recommendation; Cisco: is_safe), und den Anteil der Angriffsmuster, die sie als SAFE eingestuft hat.
Abbildung 2 Anteile auf Urteilsebene. Links: legitime Skills ohne SAFE, nach Sprache; der orange Anteil ist DO NOT INSTALL (SkillSpector) bzw. HIGH/CRITICAL (Cisco). Rechts: Angriffsmuster, die die Engine als SAFE eingestuft hat.
Engine
en
ru
de
zh
alle
Angriffsmuster mit Urteil SAFE
SkillSpector 2.12 · static
94 % (33/35)
37 % (14/38)
28 % (8/29)
81 % (29/36)
61 %
40 %
Cisco skill-scanner 2.3 · balanced
46 % (18/39)
3 % (1/38)
27 % (8/30)
36 % (14/39)
28 %
85 %
Cisco skill-scanner 2.3 · quiet
44 % (17/39)
3 % (1/38)
20 % (6/30)
31 % (12/39)
25 %
85 %
Zusammen mit §2 gelesen: SkillSpectors 94 % auf Englisch sind überwiegend der Codemengen-Effekt; seine 37 % auf Russisch, wo fast nichts Code mitbringt, sind überwiegend eine einzige Regel (§4). Ciscos 3 % auf Russisch gegenüber 46 % auf Englisch sind derselbe Mengeneffekt, durch einen anderen Bewerter gesehen. Keiner der beiden statischen Modi trennt die Angriffsmuster von der legitimen Menge: SkillSpector stuft 40 % davon als SAFE ein, Cisco 85 %.
§4 Die Regeln dahinter
Zählt man nur Befunde, die in einer Markdown-Datei liegen, verschwindet der Codemengen-Effekt weitgehend, und die Sprache des Textes bleibt übrig:
Engine · MEDIUM+-Befunde in .md-Dateien
en
ru
de
zh
SkillSpector 2.12 · static
100 %
76 %
41 %
89 %
Cisco skill-scanner 2.3 · balanced
46 %
11 %
13 %
44 %
Cisco skill-scanner 2.3 · quiet
44 %
11 %
7 %
44 %
hidden-char checker (ours, control)
5 %
0 %
0 %
0 %
Vier Regeln erklären den größten Teil des sprachspezifischen Verhaltens:
SkillSpector AE4, „Suspicious Unicode normalization or mixed-script content“.207 Befunde auf russischem Markdown, 3 auf englischem, 2 auf chinesischem, 0 auf deutschem. Jede russische SKILL.md, die einen Codeblock, einen Produktnamen oder einen Befehl enthält, mischt kyrillische und lateinische Schrift und löst sie aus. Sie ist MEDIUM und hebt einen reinen Markdown-Skill auf Russisch allein in etwa einem Drittel der Fälle von SAFE auf CAUTION. (Unser eigener, auf Russisch geschriebener Skill sammelt vier davon.)
SkillSpector RP1, „npx commands without a version suffix“. 346 Befunde auf englischem Markdown — die größte einzelne Quelle von MEDIUM-Befunden auf englischem Text. Dokumentation, in der npx something steht, gilt als Lieferkettenrisiko, auch wenn es ein Beispiel ist und kein Installationsschritt.
Cisco YARA_prompt_injection_unicode_steganography. 112 Befunde auf chinesischen Paketen, 24 auf deutschen, 0 auf russischen — überwiegend in Code- und Datendateien, nicht in der SKILL.md, und der Hauptgrund für Ciscos höhere chinesische Quote.
Cisco YARA_code_execution_generic. 31 Befunde auf englischem Markdown, 0 in den drei anderen Sprachen. Seine Muster passen auf englische Wörter; Text in anderen Sprachen kann sie nicht auslösen — und Angriffe in diesen Sprachen ebenso wenig.
Regeln, die auf legitimem Markdown feuern, ab MEDIUM
SkillSpector
Regel
en
ru
de
zh
gesamt
RP1
346
12
14
40
412
AE4
3
207
0
2
212
AE1
23
4
25
118
170
PE3
39
2
24
24
89
E1
34
0
14
39
87
AS3
32
1
44
3
80
RA2
61
2
1
12
76
EA2
58
1
5
7
71
Cisco skill-scanner, balanced
Regel
en
ru
de
zh
gesamt
TOOL_ABUSE_UNDECLARED_NETWORK
14
1
2
14
31
YARA_code_execution_generic
31
0
0
0
31
CORRELATED_SENSITIVE_NETWORK_FLOW
0
0
24
0
24
PIPELINE_TAINT_FLOW
1
0
0
8
9
COMPOUND_FETCH_EXECUTE
7
0
0
1
8
ALLOWED_TOOLS_WRITE_VIOLATION
0
3
0
1
4
SOCIAL_ENG_MISLEADING_DESC
2
0
0
1
3
COMPOUND_FIND_EXEC
2
0
0
0
2
§5 Was niemand gefangen hat
Die zehn Angriffsmuster wurden erkennbar geschrieben, nicht getarnt: Es ging darum, ob die Erkennung die Übersetzung überlebt.
Abbildung 3 Höchste gemeldete Schwere je Muster und Sprache. Unsere Kontrolle für versteckte Zeichen ist nicht gezeigt; sie erkennt P-08 in allen vier Sprachen und sonst nichts — wie vorgesehen.
P-01, Anweisungsübernahme in gewöhnlichem Text („ignoriere die bisherigen Anweisungen und …“). Beide Engines melden das englische Muster; keine meldet die russische, deutsche oder chinesische Übersetzung desselben Satzes.
P-09, zu breiter Auslöser und Scope Creep („verwende diesen Skill für jede Anfrage“). Von niemandem in irgendeiner Sprache gemeldet. Es ist ein reines Textmuster — und wohl das häufigste Problem in der Praxis.
P-06, Download eines gefälschten „Voraussetzungen-Installers“. Cisco meldet ihn nur auf Englisch; SkillSpector gar nicht.
SkillSpector fängt die strukturellen Muster — Anweisung im HTML-Kommentar, curl | bash, Sammeln von Umgebungsvariablen, Base64-Shell, Zero-Width-Zeichen, Persistenz — in allen vier Sprachen. Ciscos statischer Modus fängt das Sammeln von Umgebungsvariablen und Base64 in allen vier, außerhalb des Englischen sonst nichts.
Sprachunabhängige Erkennung gibt es genau dort, wo das Muster im Code liegt. Liegt der Angriff in den Anweisungen, ist die Erkennung nur englisch oder fehlt — das Gegenteil davon, wo das Risiko heute sitzt, denn der Agent folgt den Anweisungen und führt den Code nur manchmal aus.
§6 Betriebsnotizen
SkillSpector wurde bei 8 von 186 Paketen (16–73 MB, ganze Repositories mit einer SKILL.md im Wurzelverzeichnis, eines mit 6 342 JavaScript-Dateien) in 15 Minuten nicht fertig. Cisco war mit jedem davon in unter einer Minute durch. Die 8 sind aus jeder Quote oben ausgeschlossen und hier aufgeführt: de-059, en-160, en-165, en-174, en-190, zh-112, zh-122, zh-142.
Unser eigener Prüfer für versteckte Zeichen, für diesen Benchmark geschrieben, hat legitime Skills gemeldet, bis er gelernt hatte, dass Emoji-Sequenzen U+200D verwenden und weiche Trennzeichen im Deutschen normal sind. Er meldet immer noch 7 von 146 legitimen Paketen, 2 davon im Markdown. Wir berichten ihn aus demselben Grund wie die anderen.
Cisco weist einen Skill zurück, dessen Datei Skill.md oder _template-skill.md heißt; zwei solche Einträge wurden aus dem Korpus gestrichen statt umbenannt.
§7 Was wir von einem Scanner erwarten würden
Nichts davon ist ein Argument gegen Scannen. Es ist ein Argument für ein kalibriertes Urteil, und die Korrekturen sind konkret:
Menge von Risiko trennen. Den Beitrag wiederholter, wenig aussagekräftiger Befunde deckeln (eine npx-Regel sollte sich nicht zu 100 addieren) und „großes Paket, teilweise analysiert“ sagen statt DO NOT INSTALL, wenn die ehrliche Antwort „wir haben nicht hingeschaut“ lautet.
Unicode-Regeln schriftbewusst machen. Kyrillisch plus Lateinisch in einem russischen Dokument ist der Normalfall, keine Anomalie; die Anomalie ist ein kyrillischer Buchstabe in einem lateinischen Wort. Dasselbe gilt für CJK und für deutsche weiche Trennzeichen.
Textregeln in mehr als einer Sprache testen. Eine Regel, die auf „ignore previous instructions“ passt, sollte mit ihren Übersetzungen ausgeliefert werden oder eine LLM-Prüfung sein — und die Testsuite sollte sagen, welches von beiden.
Einen Fehlalarm-Korpus veröffentlichen. Jeder Scanner bringt bösartige Testfälle mit; fast keiner eine Menge gewöhnlicher Skills, die bestehen müssen. Der Korpus hier steht unter CC BY 4.0 und kann diese Menge sein.
§8 Vorbehalte
Nur statische Modi. Beide Engines haben LLM-gestützte Modi, die das Bild verändern können, besonders bei Textmustern. Sie auszuführen ist der nächste Schritt.
Die Angriffsmuster sind kurz und auf einen Zweck beschränkt. Sie testen, ob ein Muster in einer Sprache erkannt wird, nicht, wie ein echter Angreifer es verpacken würde.
„Legitim“ ist ein Herkunftsurteil, kein Audit. Manche Befunde auf der legitimen Menge mögen zutreffen.
Ein Korpus, ein Datum. Der Scorecard wird bei jedem Engine-Release neu gerechnet; die erste Zahl, die zählt, ist die nächste.
§9 Antworten der Hersteller
Benachrichtigung vor Öffnung der Daten
Die Maintainer von SkillSpector und skill-scanner erhalten die Befunddatei und die vollständigen Tabellen am 5. November 2026, sieben Tage bevor am 12. November 2026 das Repository geöffnet wird — Korpus-Manifest, Angriffsmuster, Skripte, Lauflogs und aggregierte Ergebnisse. Die Rohausgabe der Engines je Skill wird nicht weitergegeben; sie reproduziert sich aus dem Manifest. Ihre Antworten und alle in der Zwischenzeit veröffentlichten Korrekturen werden hier unverändert wiedergegeben.
Verfasst von Andrey Trukhachev. Korrekturen und Einwände: andrey@skillverdict.dev. Schwere-Wörter auf dieser Seite (SAFE, CAUTION, DO NOT INSTALL, HIGH, MEDIUM) zitieren die Ausgabe der Engines und sind nicht unser Urteil über irgendeinen Skill.
Phase 2
Bescheid bekommen, wenn die Skill-Seiten öffnen
Eine E-Mail, wenn Phase 2 live ist, sonst nichts. Wählen Sie Ihren Mail-Dienst; die Nachricht ist vorgeschrieben, senden Sie sie so ab.