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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
opencart-reward-free-checkout — OpenCart 4.1.0.4のreward pointsとFree Checkoutの支払いバイパスを組み合わせた、認証済み顧客がポイントを保持しつつ注文金額を過少支払いできる脆弱性のPoCエクスプロイトおよび検証ラボ。 | Kitploit
ツール/GitHubGitHub/abraxas/opencart-reward-free-checkout
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストラボと実践
GitHubabraxas/opencart-reward-free-checkout

opencart-reward-free-checkout

OpenCart 4.1.0.4のreward pointsとFree Checkoutの支払いバイパスを組み合わせた、認証済み顧客がポイントを保持しつつ注文金額を過少支払いできる脆弱性のPoCエクスプロイトおよび検証ラボ。

リポジトリを見る
3日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Abraxas Labs - opencart-reward-free-checkout

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  opencart-reward-free-checkout

opencart-reward-free-checkout

OpenCart 4.1.0.4 - OpenCart Ltd

CVE-2025-15116 は 4.1.0.3 までのクーポンレースでした。4.1.0.4 では、coupon.save はクーポンが変更されると payment_method を unset します。reward.save はそうしません。getTotals が <= 0.00 になるのに十分なポイントを適用し、Free Checkout を選択してから、ポイントをクリアします。Confirm は保留中の行をカタログ価格に書き換えます。free_checkout.confirm はセッションの支払いコードのみをチェックします。

報酬ポイントを持つログイン済みの顧客は、カタログ SKU を Free Checkout として発送し、ポイントを保持できます。

IDCVE はまだありません
CWECWE-840, CWE-863
CVSSHigh: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
製品OpenCart
影響範囲4.1.0.4 までの reward + Free Checkout
認証認証済み顧客(ゲストカートはこのバグではありません)
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

ログインし、ポイントでカバーされる SKU をカートに入れ、Free Checkout が表示されるのに十分な報酬を適用し、その支払い方法を保存してから、reward.save を 0 で実行します。2 回目の confirm はカタログ合計を書き込みます。free_checkout.confirm は注文を支払い済みに昇格させます。ポイントは決して引き落とされません。

シェルを取得するわけではありません。ゲストチェックアウトはこのバグではありません。reward には顧客が必要です。Free Checkout は total <= 0 のときのみ表示されます。バグは、ポイントをクリアしてもそれが非表示にならず、confirm が合計を再度見ないことです。

発見方法

私は reward.save、次に coupon.save、次に getMethods(total <= 0.00)、次にステータスが 0 の間の editOrder、そして free_checkout.confirm を読みました。4.1.0.4 では、reward=0 は session.reward を削除します。payment_method には触れません。15116 のハードニング後のクーポンは触れます。

これを最初に見るクライアントは、100 ポイントを適用し、Free Checkout を選択し、一度 confirm して、正直なゼロ合計の注文を得るでしょう。それは機能であり、バグではありません。

すでに記録された誤った道:reward.save ではなく coupon.save(そのパスは支払い方法を unset します)、ゲストチェックアウト、points=0 の製品(Free Checkout は決して表示されません)、free_checkout.confirm を通じて reward をセッションに残す(正直な無料注文、ポイントは引き落とされるべき)、order_status_id=0 のみを見る(保留は支払い済みではありません)。オラクルは status 1, total 100.00, payment free_checkout, debit 0 です。

ラボ:顧客ログイン。カートに 36(iPod Nano、points=100)を追加。reward.save 100。支払い方法に Free Checkout が表示。それを保存。Confirm が注文 3 を 0 で書き込み。reward.save 0。Confirm が注文 4 を 100.00 で書き換え。free_checkout.confirm。シードは税と送料を落とすので、reward は getTotals を正確にゼロにできます。それはバグではありません。ポイントがその行をカバーするカタログ SKU が現実的なケースです。顧客はまだ 1000 を持っています。

ラボ

cd lab
./run.sh

対象は http://127.0.0.1:18108 のみ。まず OpenCart 4.1.0.4 の upload/ を lab/www に配置してください。そのツリーはこのリポジトリには含まれていません。

SUCCESS OpenCart reward + Free Checkout underpay
IOC order-after-reward 3 total=0.0000 status=0 free_checkout.free_checkout
IOC order-after-clear 4 total=100.0000 status=0 free_checkout.free_checkout
IOC free_checkout.confirm redirect checkout/success
IOC order-final 4 total=100.0000 status=1 debit=0 balance=1000

修正

coupon.save がすでに行っているように reward.save で payment_method を unset し、free_checkout.confirm が total > 0 を拒否するようにします。

参考資料

  • github.com/opencart/opencart タグ 4.1.0.4
  • reward.php · coupon.php · free_checkout.php controller · free_checkout.php model · confirm.php
  • 対比:CVE-2025-15116
  • CWE-840 · CWE-863

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。保証なし。

ツールをダウンロード