Skip to content

[Security] その他: メールヘッダインジェクション・非推奨関数・XXE対策 #1340

@nobuhiko

Description

@nobuhiko

概要

メール送信機能のヘッダインジェクション、非推奨のSQL関数の使用、XML処理における外部エンティティ無効化の不足など、複数の軽微なセキュリティ改善事項が存在します。

深刻度: Medium / Low

脆弱性詳細

1. [Medium] メールヘッダインジェクション

ファイル: data/class/SC_SendMail.php (L150-151)

public function setSubject($subject)
{
    $this->subject = mb_encode_mimeheader($subject, 'ISO-2022-JP-MS', 'B', "\n");
    $this->subject = str_replace(["\r\n", "\r"], "\n", $this->subject);
}

問題点: 改行除去がMIMEエンコード後に行われており、エンコード前の改行が残る可能性

修正案:

public function setSubject($subject)
{
    $subject = str_replace(["\r\n", "\r", "\n"], ' ', $subject);
    $this->subject = mb_encode_mimeheader($subject, 'ISO-2022-JP-MS', 'B', "\n");
}

2. [Low] 非推奨の sfQuoteSmart() 関数使用

ファイル:

  • data/class/util/SC_Utils.php (L1203-1214)
  • data/class/helper/SC_Helper_DB.php (L1144-1174)
  • data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php (L177, 186, 198)
  • data/class/pages/admin/products/LC_Page_Admin_Products_ClassCategory.php (L308, 323, 338)
$where = 'category_id = '.SC_Utils_Ex::sfQuoteSmart($parent_category_id);

問題点: プレースホルダではなく手動エスケープによるSQL構築

修正案: プレースホルダベースのクエリに変更

$objDb->sfRankUp('dtb_product_categories', 'product_id', $product_id,
                 'category_id = ?', [$parent_category_id]);

3. [Low] Owner's Store のCSRF保護無効化

ファイル: data/class/pages/upgrade/LC_Page_Upgrade_Base.php (L107-114)

public function doValidToken($is_admin = false)
{
    // nothing.
}

修正案: 代替のCSRF保護(署名付きトークン等)を実装

4. [Low] DOMDocument での外部エンティティ無効化未設定

ファイル: data/class/helper/SC_Helper_Transform.php (L55)

$this->objDOM = new DOMDocument();
@$this->objDOM->loadHTML($source);

修正案:

libxml_disable_entity_loader(true);
$this->objDOM = new DOMDocument();
@$this->objDOM->loadHTML($source);

影響範囲

メールスパム送信、SQLインジェクションのリスク(限定的)、XXE攻撃(限定的)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions