T09 · Insecure Skill Coding Practices
- Location
scripts/check-slippage.py:43- Finding
Wallet Address and Trade Intent Disclosed Through Quote URL
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is not destructive, but it gives financial strategy guidance using under-disclosed wallet-linked quote requests and weakly verified external market data.
Install only if you are comfortable with a financial research skill that calls live third-party DeFi APIs and stores local position data. Do not provide a real wallet address for quote previews unless you accept that Pendle may receive wallet-linked trade intent metadata. Treat 'verified' route labels and loop rankings as research leads, not execution approval, and independently verify protocol support, liquidity, borrow caps, slippage, and URLs before acting.
scripts/check-slippage.py:43Wallet Address and Trade Intent Disclosed Through Quote URL
scripts/scan-contango-pt-markets.py:12Mutable Unpinned Contango Configuration Is Treated as Verified Financial Data
scripts/merge-loop-data.py:103Hard-Coded User Confirmation Improperly Elevates a Market's Trust and Ranking
The declared description presents a comprehensive Pendle PT strategy tool covering research, opportunity selection, monitoring existing positions, maturity awareness, and planning multiple action types with explicit wallet-path handling. The supplied code chunk is much narrower: it performs a read-only quote preview against the Pendle Convert API for a single USDC→PT conversion candidate and reports slippage and APY-related fields. While this is related to execution planning/research, it is only one small subset of the declared functionality. Because the primary behavior is materially narrower than the declared purpose and several major declared capabilities are absent, this is a description-behavior mismatch.
The declared description presents a broad Pendle PT strategy skill covering market scanning, ranking, position tracking, maturity monitoring, and execution planning with managed-wallet or manual transaction paths. The supplied code only formats already-ranked market data from a local JSON file into a Markdown brief. While the report content is related to Pendle PT market research and includes maturity-related display fields such as daysToExpiry, it does not itself scan markets, rank them from raw data, track positions, monitor active holdings, prepare deposits/redeems/withdrawals/rollovers, or interact with any wallet backend. This is a material scope reduction and a different primary purpose, so the description does not accurately represent what this code chunk actually does.
The declared description presents a user-facing Pendle PT strategy skill that supports research plus position tracking, maturity monitoring, and execution planning with wallet-path disclosures and possible managed-wallet execution. The supplied code is much narrower and different in emphasis: it merges local data sources into a JSON file of 'loop candidates', infers integrations with Morpho/Euler/Contango, applies APY/liquidity heuristics, and outputs leverage/loopability assessments. While there is partial overlap with market scanning/ranking and identifying stable-ish PT opportunities, the code lacks the major declared capabilities around wallet handling, transaction preparation/execution paths, confirmations, and position monitoring. Therefore the description materially overstates and mischaracterizes the actual behavior.
The declared description presents a broad Pendle PT strategy skill covering market research/ranking, position tracking, maturity monitoring, and transaction preparation with wallet-path handling. The supplied code is much narrower: it is a CLI report generator that loads a precomputed JSON file and prints summaries of loop-ranked market candidates. While it loosely aligns with market ranking/research in the Pendle PT domain, its primary purpose is reporting on looping ideas, not the broader fixed-yield strategy lifecycle described. Key declared behaviors—wallet execution paths, explicit confirmations, transaction preparation, redeem/withdraw/rollover planning, and active position monitoring—are absent. Therefore the description materially overstates and mischaracterizes the code's actual behavior.
The declared description presents a full Pendle PT strategy skill that can research opportunities, monitor positions and maturities, and prepare or potentially execute actions through a managed wallet or manual path. The supplied code chunk is much narrower: it only loads a local JSON file of already-ranked markets and prints a text report segmented by fit/verdict categories. While this supports the 'market scanning/ranking report' aspect at a presentation level, it lacks the major described capabilities around wallet-backed execution, transaction preparation, user confirmation flows, position tracking, and monitoring. Therefore the description materially overstates what this code chunk actually does.
The declared description presents a broad Pendle PT strategy tool covering research, market selection, active monitoring, and execution-path-aware action preparation. The supplied code does only one narrow subset: local position status reporting from data/positions.json. It does not scan markets, rank opportunities, interact with wallets, prepare transactions, or support execution flows. While position tracking/status reporting is consistent with part of the description, the primary behavior of this code chunk is materially narrower than the declared purpose, so this is a description-behavior mismatch.
The declared description presents a broad Pendle PT strategy skill covering market research, ranking, active position monitoring, maturity monitoring, and execution preparation with wallet-path disclosures. The supplied code is much narrower: it only filters pre-ranked Pendle PT market data and cross-references it against Contango's public integration config to verify supported PT routes. It does not track user positions, monitor maturities in any active sense, prepare execution actions, or interact with any wallet backend. Its primary purpose is external integration verification for Contango-supported Pendle PT markets, which is materially different from the broader declared operational and execution-focused behavior.
The declared description presents a broad Pendle PT strategy tool focused on market research, ranking, ongoing position/maturity monitoring, and preparation or execution of user actions via controlled wallet flows. The supplied code instead has a much narrower and different function: it cross-references ranked Pendle PT markets against Euler's live GraphQL tokenlist and vault data to verify Euler-related PT market support, then saves the results to disk. This Euler-specific verification behavior is undeclared, while several central declared capabilities—wallet path handling, transaction planning/execution, active position tracking, and maturity monitoring—are absent from the code. That makes the actual behavior materially different from the declared purpose.
The declared description presents a broad Pendle PT strategy assistant that can scan/rank opportunities, monitor positions and maturities, and prepare user-confirmed execution flows such as deposit, redeem, withdraw, and rollover. The supplied code does only one narrow data-processing task: it filters input PT market records, queries Morpho's GraphQL endpoint for listed collateral markets, and saves the results. That is related to market research/scanning, but it does not implement the major described capabilities around position tracking, maturity monitoring, execution planning, or managed/manual wallet transaction pathways. Its primary purpose is better described as Morpho PT-collateral market verification/enrichment, so the description materially overstates and mischaracterizes the code chunk's behavior.
The declared description is about a Pendle PT investment/research workflow: evaluating PT opportunities, monitoring positions, handling maturity-related actions, and planning wallet-mediated execution. The supplied code does none of that. It only downloads the Pendle 'pencosystem' webpage, parses structured JSON for partner records, and saves ecosystem-partner metadata. This is a materially different primary purpose and resource target from PT strategy and execution planning, so the description does not accurately represent the code's behavior.
Referenced artifact was not completely inspected
| `SKILL.md` | Strategy instructions and safety rules |
Without declared permissions the skill's intent is opaque and cannot be validated.
The manifest describes a Pendle PT fixed-yield strategy focused on scanning, ranking, tracking, monitoring, and execution planning for Pendle PT positions. This script queries Morpho's GraphQL API and produces a dataset of Morpho PT-collateral lending markets, which is a distinct protocol-level capability not clearly described in the manifest's stated scope.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
DATA = HERE.parent / 'data'
DEFAULT_PT_INPUT = DATA / 'ranked.latest.json'
DEFAULT_OUT = DATA / 'morpho-pt-markets.latest.json'
GRAPHQL_URL = 'https://api.morpho.org/graphql'
def iso_now():
The manifest describes a Pendle PT fixed-yield strategy skill focused on market scanning, ranking, position tracking, maturity monitoring, and execution planning for PT positions. This script instead fetches the public Pendle '/pencosystem' page, extracts partner/protocol metadata, and writes a partner listing JSON file, which is a different ecosystem-directory collection task rather than PT opportunity analysis or execution planning.
This JSON file defines strategy parameters but provides no explicit activation conditions, trigger phrases, or scope constraints for when the associated skill should run. For manifest/config files, the absence of invocation boundaries can make activation behavior ambiguous if this file is used as part of skill discovery or routing.
The header documentation says the script fetches current market data from the Pendle API for mark-to-market, and helper functions for that fetch exist. However, main() never calls fetch_market_data() or fetch_json(), so the runtime behavior is limited to local position-file analysis and reporting.
This code creates the output directory and writes JSON to the path provided by --out, defaulting to data/ranked.latest.json. Although the path is configurable, there is no confirmation prompt or explicit warning that the operation will overwrite an existing file, which is a file-write action with potential user data impact.
The manifest frames the skill around Pendle PT market scanning, ranking, position tracking, maturity monitoring, and execution planning. This script instead queries Euler's GraphQL indexer, correlates Pendle PTs against Euler tokenlists and vaults, and writes a separate Euler verification dataset, which expands behavior beyond the described Pendle-only scope.
No suspicious patterns detected.