Back to skill

Security audit

software-copyright-skill

Security checks for vulnerabilities and agentic risk

Overview

This skill is a document-generation helper that needs broad local project access, but the access is mostly disclosed and fits its stated purpose.

Install only if you are comfortable letting the agent scan the target project and generate documents from source files. Review generated code documents before sharing them, avoid supplying real production credentials unless needed for screenshots, prefer cookie files with limited scope, and be cautious before applying the optional global git proxy configuration.

Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill advertises and instructs use of shell commands, project scanning, file generation, template processing, and optional network/proxy configuration, but the metadata does not declare corresponding permissions. This creates a capability-transparency gap: an agent or reviewer may treat the skill as lower risk than it really is, while the skill can read project files, write documents, invoke subprocesses, and potentially reach external services.

Credential Access

High
Category
Privilege Escalation
Content
return result
    
    for entry in entries:
        if entry.name.startswith('.') and entry.name not in {'.env'}:
            continue
        if entry.name in IGNORE_DIRS:
            continue
Confidence
82% confidence
Finding
This logic explicitly exempts '.env' from the hidden-file skip rule, meaning '.env' files will be included in the scanned directory structure and metadata output. While the script does not read file contents, it records the presence, path, and size of '.env' files in generated JSON, which can reveal secret-bearing files and increase the risk of downstream exposure if the JSON is shared with an LLM or external system.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"author": "",
  "license": "ISC",
  "dependencies": {
    "@excalidraw/excalidraw": "^0.18.1",
    "react": "^18.3.1",
    "react-dom": "^18.3.1"
  }
Confidence
92% confidence
Finding
The dependency uses a caret version range, which permits automatic resolution to newer minor/patch releases rather than a single fixed version. This weakens build reproducibility and can expose consumers to supply-chain risk if a newly published allowed version is malicious or introduces a vulnerable change.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"license": "ISC",
  "dependencies": {
    "@excalidraw/excalidraw": "^0.18.1",
    "react": "^18.3.1",
    "react-dom": "^18.3.1"
  }
}
Confidence
92% confidence
Finding
The React dependency is specified with a caret range, so installs may pull different permitted versions over time. While common in development, this increases supply-chain exposure and reduces reproducibility if an upstream release within range is compromised or unstable.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"dependencies": {
    "@excalidraw/excalidraw": "^0.18.1",
    "react": "^18.3.1",
    "react-dom": "^18.3.1"
  }
}
Confidence
92% confidence
Finding
The react-dom dependency is not pinned to a single version, allowing future matching releases to be installed implicitly. That creates a low-severity supply-chain and integrity risk because the build outcome can change without a code change in this repository.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-docx>=0.8.11
lxml>=4.9.0
Pillow>=9.0.0
olefile>=0.46
Confidence
98% confidence
Finding
The dependency is specified with a lower-bound version only, which allows future installs to resolve to different versions over time. This weakens build reproducibility and can unintentionally introduce vulnerable or incompatible package versions through the supply chain.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-docx>=0.8.11
lxml>=4.9.0
Pillow>=9.0.0
olefile>=0.46
Confidence
99% confidence
Finding
The lxml dependency is unpinned, so environments may resolve to different versions depending on install time and package index state. In this case the risk is heightened because the minimum permitted version includes a release with known advisories, making accidental installation of a vulnerable version more plausible.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-docx>=0.8.11
lxml>=4.9.0
Pillow>=9.0.0
olefile>=0.46
Confidence
99% confidence
Finding
The Pillow dependency is unpinned, allowing installers to select any version at or above 9.0.0 based on resolver behavior and environment. Because the stated minimum itself is associated with multiple critical advisories, this creates meaningful supply-chain and runtime exposure if image parsing is reachable.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-docx>=0.8.11
lxml>=4.9.0
Pillow>=9.0.0
olefile>=0.46
Confidence
96% confidence
Finding
The olefile package is declared with a minimum version only, so installations are not reproducible and may drift over time. While no specific advisory is cited here, unpinned dependencies increase supply-chain risk and make security review harder.

Known Vulnerable Dependency: lxml==4.9.0 — 4 advisory(ies): CVE-2026-41066 (lxml: Default configuration of iterparse() and ETCompatXMLParser() allows XXE to); CVE-2022-2309 (lxml NULL Pointer Dereference allows attackers to cause a denial of service); CVE-2022-2309 (NULL Pointer Dereference allows attackers to cause a denial of service (or appli) +1 more

High
Category
Supply Chain
Confidence
95% confidence
Finding
The allowed lxml version range includes 4.9.0, which static analysis associates with multiple advisories including XXE-related parsing issues and denial-of-service conditions. In a skill that analyzes project code and generates documents, XML or document-processing libraries may handle untrusted content, making parser flaws more relevant than in a purely local-only workflow.

Known Vulnerable Dependency: Pillow==9.0.0 — 10 advisory(ies): CVE-2023-50447 (Arbitrary Code Execution in Pillow); CVE-2024-28219 (Pillow buffer overflow vulnerability); CVE-2026-55379 (Pillow `BdfFontFile`: `Image.new()` called without `_decompression_bomb_check()`) +7 more

Critical
Category
Supply Chain
Confidence
98% confidence
Finding
The allowed Pillow version range includes 9.0.0, which is flagged with multiple serious advisories including potential arbitrary code execution and memory-safety issues. Because this skill generates formatted documents and may process embedded images or assets from project materials, vulnerable image parsing could be exposed to attacker-controlled files and lead to compromise or denial of service.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
`)}}}else p=dn(Ul(a.link||""));let u=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="active",h=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="hover";return Ie("div",{className:mT("excalidraw__embeddable-container",{"is-hovered":h}),style:{transform:c?`translate(${l-this.state.offsetLeft}px, ${s-this.state.offsetTop}px) scale(${t})`:"none",display:c?"block":"none",opacity:sE(a,Ps(a,this.scene.getNonDeletedElementsMap()),this.elementsPendingErasure,null,this.state.openDialog?.name==="elementLinkSelector"?Mh:1),"--embeddable-radius":`${ps(Math.min(a.width,a.height),a)}px`},children:Nd("div",{className:"excalidraw__embeddable-container__inner",style:{width:c?`${a.width}px`:0,height:c?`${a.height}px`:0,transform:c?`rotate(${a.angle}rad)`:"none",pointerEvents:u?Wr.enabled:Wr.disabled},children:[h&&Ie("div",{className:"excalidraw__embeddable-hint",children:g("buttons.embeddableInteractionButton")}),Ie("div",{className:"excalidraw__embeddable__outer",style:{padding:`${a.strokeWidth}px`},children:(Et(a)?this.props.renderEmbeddable?.(a,this.state):null)??Ie("iframe",{ref:f=>this.cacheEmbeddableRef(a,f),className:"excalidraw__embeddable",srcDoc:p?.type==="document"?p.srcdoc(this.state.theme):void 0,src:p?.type!=="document"?p?.link??"":void 0,scrolling:"no",referrerPolicy:"no-referrer-when-downgrade",title:"Excalidraw Embedded Content",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,sandbox:`${p?.sandbox?.allowSameOrigin?"allow-same-origin":""} allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation allow-downloads`})})]})},a.id)})})}toggleOverscrollBehavior(t){document.documentElement.style.overscrollBehaviorX=t.type==="pointerenter"?"none":"auto"}render(){let t=this.scene.getSelectedElements(this.state),{renderTopRightUI:r,renderCustomStats:n}=this.props,i=this.scene.getSceneNonce(),{elementsMap:a,visibleElements
...[truncated 27 chars]
Confidence
96% confidence
Finding
This is a true vulnerability because the component renders untrusted content into an iframe using both `srcDoc` for generated HTML and `src`/custom embeddable links derived from element data and plugin output. The iframe sandbox still permits `allow-scripts`, `allow-forms`, `allow-popups`, `allow-downloads`, and conditionally `allow-same-origin`, which can enable active content execution, phishing/UI redress, popup abuse, and potentially stronger isolation bypass depending on the embed validator and custom `renderEmbeddable`/plugin inputs.

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.exposed_secret_literal

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
references/excalidraw-diagram/lib/chunk-EIO257PC.js:2

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/excalidraw-diagram/lib/chunk-K2UTITRG.js:1