registry  /  lti_ap  /  1.9.2

lti_ap@1.9.2

TypeScript LTI 1.3 tool provider

AI Security Review

scanned 1h ago · by lpm-firewall-ai

No confirmed malicious package behavior was found. A serious runtime auth weakness is present because JWT payloads appear accepted without signature verification.

Static reason
No blocking static signals were detected.
Trigger
Runtime LTI launch or notice handling after an application uses the provider.
Impact
Potential authentication/session bypass in consuming LTI applications, but no npm install-time or import-time attack behavior.
Mechanism
JWT decode without signature verification in token validation
Rationale
Static inspection does not support a malicious verdict, but it does show a concrete critical authentication vulnerability in runtime token validation. Treat as warn/suspicious rather than publish-block because the risky behavior is package-aligned server logic and not an npm supply-chain attack.
Evidence
package.jsonltits/index.jsltits/modules/Auth.jsltits/provider/provider.jsltits/services/DeepLink.jsltits/services/noticeLink.jsltits/services/Nrps.jsltits/configs/Database.js

Decision evidence

public snapshot
AI called this Suspicious at 86.0% confidence as Critical Vulnerability with medium false-positive risk.
Evidence for warning
  • ltits/modules/Auth.js decodes JWTs and fetches a JWK set but does not call jwt.verify or otherwise verify the signature before returning payload.
  • ltits/provider/provider.js uses Auth.validateToken results to create sessions and accept notice tokens, so forged LTI tokens may be trusted at runtime.
  • Runtime network calls use platform-supplied URLs for JWK, access token, PNS, NRPS, eula, and report endpoints.
Evidence against
  • package.json has only a prepare build script; no preinstall/install/postinstall hook.
  • ltits/index.js only constructs and exports a Provider instance.
  • No child_process, eval/vm/Function, native binary loading, persistence, destructive filesystem behavior, or credential harvesting found.
  • Database writes are package-aligned LTI provider state and key storage after user setup/runtime requests.
  • Network activity is user/runtime-invoked LTI/OIDC platform integration, not hardcoded exfiltration.
Behavioral surface
Source
CryptoNetwork
Supply chain
HighEntropyStringsUrlStrings
Manifest
NoLicense
scanned 23 file(s), 73.1 KB of source, external domains: purl.imsglobal.org

Source & flagged code

2 flagged · loading source
ltits/modules/Auth.jsView file
Published source reference
Medium
Ai Review Evidence

ltits/modules/Auth.js decodes JWTs and fetches a JWK set but does not call jwt.verify or otherwise verify the signature before returning payload.

ltits/modules/Auth.jsView on unpkg
ltits/provider/provider.jsView file
Published source reference
Medium
Ai Review Evidence

ltits/provider/provider.js uses Auth.validateToken results to create sessions and accept notice tokens, so forged LTI tokens may be trusted at runtime.

ltits/provider/provider.jsView on unpkg

Findings

4 Medium5 Low
MediumNetwork
MediumAi Review Evidenceltits/modules/Auth.js
MediumAi Review Evidenceltits/provider/provider.js
MediumAi Review Evidence
LowNon Install Lifecycle Scripts
LowScripts Present
LowHigh Entropy Strings
LowUrl Strings
LowNo License