Repository navigation
v1.3.0 — Catches QR-code payment scams and disguised text
✨ New: QR codes in mail are read and checked
Some phishing mail contains no clickable link at all — only a QR code image leading to a payment or login page. Scanning it on a phone bypasses every link check on the PC, and because such mail is often sent from the scammer's own correctly authenticated domain, it used to receive a green ✅ AUTH PASS badge.
The add-on now reads QR codes from images contained in the message (images embedded in the HTML, inline images and image attachments). A QR code holding a URL is checked like a link, and one pointing to a domain other than the sender's is a suspicious finding that keeps the badge from turning green. It is not suppressible by the trust list: the payment-scam codes seen in the wild point to a legitimate payment service's person-to-person transfer page, so a legitimate destination does not make it safe for an unrelated sender to ask you to scan it. QR codes pointing to the sender's own domain, or holding booking or ticket codes, do not affect the verdict and are listed in the Link Safety card.
Remote images are never fetched, images over 1 MB (typically photos) are skipped, and decoding runs in a separate worker with a time limit, so display speed is unchanged. The decoder, jsQR 1.4.0 (Apache-2.0), is bundled unmodified; see VENDOR.md.
✨ New: 💀 DISGUISED TEXT — text direction overrides
The Unicode control characters RLO/LRO force text to display in reverse order. Spammers store a keyword backwards and wrap it in RLO so it reads correctly on screen while slipping past keyword filters; in attachment names the same trick hides the real extension (invoice[RLO]fdp.exe shows as invoiceexe.pdf). When an override actually reorders characters in the display name, subject, body or an attachment name, the badge becomes 💀 DISGUISED TEXT, and the display name is shown with the control characters made visible (e.g. ⟨RLO⟩).
Thunderbird replaces these characters with spaces in the subject, sender name and attachment names it hands to add-ons, so the add-on reads the raw headers (now fetched for every message) and decodes them itself. Right-to-left languages are not affected: Arabic and Hebrew text does not need overrides, marks/embeddings/isolates are never flagged, and an override is flagged only when it actually changes the displayed order.
🐞 Fix: URLs followed by Japanese text reported as internationalized domains
When a URL in the body was followed by a line break or by Japanese text with no space (for example https://www.example.comにアクセス), the following text was read as part of the host name and reported as a link to an internationalized domain. Line breaks and block boundaries are now separators, and a URL ends at Japanese punctuation or where the top-level domain switches from ASCII to other characters. Genuine internationalized domains such as https://例え.jp/ are still detected.
📊 Measured on real mail
In a survey of about 34,000 legitimate-folder messages received from 2024 onward: 7 QR payment-scam messages and 4 disguised-text spam messages lost the green badge; 1 legitimate message (an event form on another domain behind a QR code) did; and 10 legitimate messages regained green thanks to the URL fix.
✨ 新機能: メール内の QR コードを読み取って検査
クリックできるリンクを一切含まず、送金ページやログインページへ誘導する QR コード画像だけを載せたフィッシングメールがあります。スマートフォンで読み取ると PC 側のリンク確認をすべて素通りし、しかも詐欺師自身のドメインで認証を正しく通して届くことが多いため、これまで ✅ 認証成功(緑)と表示されていました。
メールに含まれる画像(HTML に埋め込まれた画像、インライン画像、画像の添付)から QR コードを読み取るようにしました。URL を含む QR コードはリンクと同じように検査し、送信者と別のドメインを指すものは suspicious(不審)として緑にしません。信頼リストでは解消しません。実際に出回っている送金詐欺の QR コードは正規の決済サービスの個人間送金ページを指しており、行き先が正規でも、無関係な送信者に読み取らせること自体が詐欺の典型だからです。送信者自身のドメインを指す QR コードや、予約番号・チケットのコードは判定に影響させず、リンク安全性カードに一覧表示します。
外部の画像は取得しません。1 MB を超える画像(主に写真)は読み取らず、解析は時間制限付きの別スレッドで行うため、表示速度は変わりません。デコーダの jsQR 1.4.0(Apache-2.0)を無改変で同梱しています(VENDOR.md 参照)。
✨ 新機能: 💀 文字列の偽装 — 双方向テキストの上書き
Unicode の制御文字 RLO/LRO は、文字列を逆順で表示させます。迷惑メールは、キーワードを逆順で格納して RLO で包み、画面上は正しく読ませながらキーワード型のフィルタをすり抜けます。添付ファイル名では本当の拡張子を隠すのに使われます(invoice[RLO]fdp.exe が invoiceexe.pdf と表示される)。表示名・件名・本文・添付ファイル名で上書きが実際に並びを入れ替えている場合、バッジを 💀 文字列の偽装 にします。表示名は制御文字を見える形(例: ⟨RLO⟩)にして表示します。
Thunderbird はアドオンに渡す件名・差出人名・添付ファイル名の制御文字を空白に置き換えるため、生のヘッダ(すべてのメールで取得するようにしました)を自前でデコードして検査しています。右から左に書く言語には影響しません。アラビア語・ヘブライ語の文章は上書きを必要とせず、マーク・埋め込み・分離の制御文字は対象外で、上書きも実際に表示の並びを変えている場合だけ検知します。
🐞 修正: 直後に日本語が続く URL を国際化ドメインと誤判定
本文中の URL の直後に改行や空白なしの日本語が続く場合(例: https://www.example.comにアクセス)、後続の文字までホスト名として読み、国際化ドメインへのリンクと報告していました。改行とブロック要素の境目を区切りとして扱い、和文の約物や、トップレベルドメインが ASCII から別の文字に変わる位置で URL を終えるようにしました。https://例え.jp/ のような本物の国際化ドメインは引き続き検出します。
📊 実メールでの検証
2024 年以降に受信した正規フォルダのメール約 3.4 万通で調べました。QR 送金詐欺 7 通と文字列偽装の迷惑メール 4 通が緑でなくなり、正規メールでは 1 通(QR コードの先が別ドメインのイベント申込フォーム)が緑でなくなりました。一方、URL の修正で正規メール 10 通が緑に戻りました。