T08 · Insecure Dependencies
- Location
SKILL.md:10- Finding
Unpinned Security-Critical Wallet Skill Dependency
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill matches its token-creation purpose, but it asks users to rely on an unpinned wallet skill and can submit irreversible value-spending blockchain transactions without a required final confirmation step.
Review this skill carefully before installing. Use a dedicated low-balance wallet, verify the exact monad-development package and publisher before relying on it, and require a final manual confirmation of the contract address, chain, token parameters, fees, initial buy value, and decoded transaction before signing.
SKILL.md:10Unpinned Security-Critical Wallet Skill Dependency
This step transmits a user-supplied image to an external third-party API, which creates a privacy and data-handling risk because uploaded content leaves the local environment and is processed remotely. In a skill context, this is especially relevant because users may not realize their files are being sent off-platform and stored on CDN-backed infrastructure.
image_uri (CDN URL) and is_nsfw (boolean)const imageResponse = await fetch("https://api.nadapp.net/agent/token/image", {
method: "POST",
headers: { "Content-Type": imageFile.type },
body: imageFile,
This step transmits a user-supplied image to an external third-party API, which creates a privacy and data-handling risk because uploaded content leaves the local environment and is processed remotely. In a skill context, this is especially relevant because users may not realize their files are being sent off-platform and stored on CDN-backed infrastructure.
image_uri (CDN URL) and is_nsfw (boolean)const imageResponse = await fetch("https://api.nadapp.net/agent/token/image", {
method: "POST",
headers: { "Content-Type": imageFile.type },
body: imageFile,
This request sends token metadata and associated social links to an external API for storage, which is a real external data transmission and may expose user-provided content to third-party processing and persistence. Because the metadata becomes part of a token creation flow, users may assume it is only local preparation when it is actually being uploaded externally.
| telegram | string or null | Must contain t.me and start with https:// |
const metadataResponse = await fetch("https://api.nadapp.net/agent/token/metadata", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
This request sends token metadata and associated social links to an external API for storage, which is a real external data transmission and may expose user-provided content to third-party processing and persistence. Because the metadata becomes part of a token creation flow, users may assume it is only local preparation when it is actually being uploaded externally.
| telegram | string or null | Must contain t.me and start with https:// |
const metadataResponse = await fetch("https://api.nadapp.net/agent/token/metadata", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
This step sends the creator wallet address, token details, and metadata URI to an external API, exposing linkage between the user's wallet and token creation intent to a third party. While not inherently malicious, it is a genuine confidentiality and operational-risk concern because the service learns planned deployment details before the on-chain action occurs.
| metadata_uri | string | Metadata URI from Step 2 |
const saltResponse = await fetch("https://api.nadapp.net/agent/salt", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
This step sends the creator wallet address, token details, and metadata URI to an external API, exposing linkage between the user's wallet and token creation intent to a third party. While not inherently malicious, it is a genuine confidentiality and operational-risk concern because the service learns planned deployment details before the on-chain action occurs.
| metadata_uri | string | Metadata URI from Step 2 |
const saltResponse = await fetch("https://api.nadapp.net/agent/salt", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
The skill culminates in an on-chain contract call that can transfer real value via msg.value, but it does not require an explicit user confirmation or prominently warn that funds may be spent and an irreversible blockchain transaction will be submitted. In an agent setting, omission of a pre-transaction warning materially increases the risk of unintended token deployment, accidental spending, or social-engineered use of the workflow.
No suspicious patterns detected.