Skip to content

Latest commit

 

History

History
58 lines (49 loc) · 4.43 KB

File metadata and controls

58 lines (49 loc) · 4.43 KB

Threat Model Analysis for naptha/tesseract.js

  • Description: An attacker uploads a specially crafted image (e.g., extremely large, complex patterns, or exploiting image parsing vulnerabilities) designed to consume excessive CPU or memory during OCR processing. The attacker aims to make the application unresponsive for the targeted user or potentially impact server-side components indirectly. This directly exploits Tesseract.js's image processing capabilities.
    • Impact:
      • Browser freeze or crash for the user.
      • Performance degradation for other browser tabs/applications.
      • Potential indirect DoS on server-side components if they handle pre-processing or results.
    • Affected Component: Tesseract.recognize() function (and underlying Emscripten-compiled C++ code), Web Worker, Image processing libraries used internally by Tesseract.js.
    • Risk Severity: High
    • Mitigation Strategies:
      • Implement strict image size and dimension limits before calling Tesseract.recognize().
      • Set timeouts for OCR processing within the Web Worker. Terminate the worker if the timeout is exceeded.
      • Validate image format and perform basic sanity checks on image data before processing.
      • Consider using a WebAssembly memory limit (if supported by the browser and Tesseract.js build).
  • Description: An attacker provides a corrupted or excessively large traineddata file (if the application allows custom language data). This directly targets Tesseract.js's language data loading and processing, leading to crashes, excessive memory use, or altered OCR results.
    • Impact:
      • Application crash or unresponsiveness.
      • Incorrect or misleading OCR output.
      • Potential memory exhaustion.
    • Affected Component: Tesseract.recognize() function, language data loading mechanism (langPath option), Web Worker.
    • Risk Severity: High
    • Mitigation Strategies:
      • Strongly prefer using pre-packaged, trusted language data files from the official Tesseract.js distribution.
      • If custom language data is absolutely necessary, validate the file's integrity (checksum) and size before loading it.
      • Implement strict size limits for uploaded traineddata files.
  • Description: An attacker compromises the delivery of the Tesseract.js library (e.g., via a compromised CDN or supply-chain attack) and modifies the code. This directly targets the Tesseract.js library itself. The modified code could alter OCR results, exfiltrate data, or inject malicious JavaScript.
    • Impact:
      • Arbitrary code execution in the user's browser.
      • Data exfiltration (image data, extracted text).
      • Manipulation of OCR results.
    • Affected Component: Entire Tesseract.js library (all modules and functions).
    • Risk Severity: Critical
    • Mitigation Strategies:
      • Use Subresource Integrity (SRI) tags for all Tesseract.js resources (JavaScript and WASM files).
      • Load Tesseract.js from a trusted, reputable CDN.
      • Consider hosting Tesseract.js locally (if feasible) to reduce reliance on external CDNs.
      • Implement a strong Content Security Policy (CSP) to restrict the execution of untrusted code.
  • Description: Similar to code tampering, but the attacker modifies the traineddata files. This directly targets Tesseract.js's language data, leading to incorrect or manipulated OCR results, but without arbitrary code execution.
    • Impact:
      • Incorrect or misleading OCR output.
    • Affected Component: Tesseract.recognize() function, language data files.
    • Risk Severity: High
    • Mitigation Strategies:
      • Use Subresource Integrity (SRI) tags for the traineddata files.
      • Load language data from a trusted source.
      • If hosting language data locally, ensure its integrity (e.g., using checksums).