BitFire Security – Firewall, Malware Scanner, Bot Blocker, Login Protection

bitfire · by bitslip6 · wordpress.org ↗ · SVN ↗
Active installs
300
Current version
5.0.9
Added
2022-06-22
Last updated
2026-07-01 (25d ago)
First seen by beacon
3mo ago
Total downloads
15,641

Statistics

2024-06-16 → 2026-07-02 · 747 days
Downloads today
168
7-day total 338
Week over week
▲ +8%
vs prior 7 days
30-day trend
flat
▲ +541% MoM
Abandonment
○○○○○
healthy
Downloads/day Linear trend
2341761175902024-062024-102025-022025-062025-102026-022026-06
2241681125602026-042026-042026-052026-052026-062026-06
2241681125602026-062026-062026-062026-062026-062026-06

Active versions

5.04.8other
5.0 · 58.0%4.8 · 33.0%other · 9.0%

Ratings

5★
7
4★
0
3★
0
2★
0
1★
0

Support: 0/0 resolved

Alerts (0)

No open alerts.

Show 2 resolved alerts
Critical code_pattern Resolved · fp_cloudflare_doh_lookup 2026-07-02 12:39:59 (24d ago)
Slugbitfire
Patternhardcoded_ip_url
Kindbuiltin
Version5.0.9
Hit count3
First hit
File
src/util.php
Line
3,429
Snippet
$url = 'https://1.1.1.1/dns-query?name=' . urlencode($query) . '&type=PTR';
Explanationplugin source hardcodes a raw IPv4 URL (e.g. `https://94.156.79.8/...`) — legitimate plugins use DNS hostnames because IPs change. Hardcoded IPs in plugin code are almost always either dev leftovers or attacker C2 infrastructure. The June 2024 social-warfare keylogger (audit #14) used `https://94.156.79.8/sc-top.js` for the JS payload host, `/AddSites` for victim registration, `/CMSUsers` for filesystem-recon exfil. Operator infrastructure on raw IPs avoids domain registration / RDAP detection paths. Post-filtered to skip RFC1918/loopback/link-local ranges and `vendor/`/`tests/` paths.
View raw JSON
{
    "slug": "bitfire",
    "pattern": "hardcoded_ip_url",
    "kind": "builtin",
    "version": "5.0.9",
    "hit_count": 3,
    "first_hit": {
        "file": "src/util.php",
        "line": 3429,
        "snippet": "$url      = 'https://1.1.1.1/dns-query?name=' . urlencode($query) . '&type=PTR';"
    },
    "explanation": "plugin source hardcodes a raw IPv4 URL (e.g. `https://94.156.79.8/...`) \u2014 legitimate plugins use DNS hostnames because IPs change. Hardcoded IPs in plugin code are almost always either dev leftovers or attacker C2 infrastructure. The June 2024 social-warfare keylogger (audit #14) used `https://94.156.79.8/sc-top.js` for the JS payload host, `/AddSites` for victim registration, `/CMSUsers` for filesystem-recon exfil. Operator infrastructure on raw IPs avoids domain registration / RDAP detection paths. Post-filtered to skip RFC1918/loopback/link-local ranges and `vendor/`/`tests/` paths."
}
Critical code_scan_delta Resolved · fp_self_referential_scanner_signatures 2026-07-02 04:04:56 (24d ago)
Slugbitfire
Previous version4.8.2
Current version5.0.9
New findings
PatternKindFileLineSnippetConfidence
eval_callbuiltinsrc/dashboard/threat_hunter.php1,795$reasons[] = 'eval()';medium
eval_callbuiltinsrc/dashboard/threat_hunter.php3,213['/\beval\s*\(/i', 'eval()', 'danger'],medium
eval_callbuiltinsrc/dashboard/threat_hunter.php3,229'eval(',medium
eval_callbuiltinsrc/dashboard/threat_hunter.php3,450$excerpt_clause = content_like_clause('post_excerpt', ['<script', 'javascript:', 'eval(']);medium
eval_callbuiltinsrc/dashboard/threat_hunter.php3,809$tn_clause = content_like_clause('t.name', ['<script', 'javascript:', 'eval(']);medium
base64_decodebuiltinsrc/dashboard/threat_hunter.php1,799$reasons[] = 'base64_decode()';medium
gzinflatebuiltinsrc/dashboard/threat_hunter.php1,803$reasons[] = 'gzinflate()';medium
hardcoded_ip_urlbuiltinsrc/util.php3,429$url = 'https://1.1.1.1/dns-query?name=' . urlencode($query) . '&type=PTR';high
hardcoded_ip_urlbuiltinsrc/util.php3,475$url = 'https://1.1.1.1/dns-query?name=' . urlencode($hostname) . '&type=A';high
hardcoded_ip_urlbuiltinsrc/util.php3,523$url = 'https://1.1.1.1/dns-query?name=' . urlencode($hostname) . '&type=AAAA';high
base64_decodebuiltinsrc/wpcli.php271$encoded = base64_decode($data['data'] ?? '');medium
base64_decodebuiltinsrc/wpcli.php285$encoded = base64_decode($data['data'] ?? '');medium
eval_callbuiltinsrc/cms2.php1,807T_EVAL => 'eval()',medium
New finding count13
View raw JSON
{
    "slug": "bitfire",
    "previous_version": "4.8.2",
    "current_version": "5.0.9",
    "new_findings": [
        {
            "pattern": "eval_call",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 1795,
            "snippet": "$reasons[] = 'eval()';",
            "confidence": "medium"
        },
        {
            "pattern": "eval_call",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 3213,
            "snippet": "['/\\beval\\s*\\(/i',                              'eval()',               'danger'],",
            "confidence": "medium"
        },
        {
            "pattern": "eval_call",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 3229,
            "snippet": "'eval(',",
            "confidence": "medium"
        },
        {
            "pattern": "eval_call",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 3450,
            "snippet": "$excerpt_clause = content_like_clause('post_excerpt', ['<script', 'javascript:', 'eval(']);",
            "confidence": "medium"
        },
        {
            "pattern": "eval_call",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 3809,
            "snippet": "$tn_clause = content_like_clause('t.name', ['<script', 'javascript:', 'eval(']);",
            "confidence": "medium"
        },
        {
            "pattern": "base64_decode",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 1799,
            "snippet": "$reasons[] = 'base64_decode()';",
            "confidence": "medium"
        },
        {
            "pattern": "gzinflate",
            "kind": "builtin",
            "file": "src/dashboard/threat_hunter.php",
            "line": 1803,
            "snippet": "$reasons[] = 'gzinflate()';",
            "confidence": "medium"
        },
        {
            "pattern": "hardcoded_ip_url",
            "kind": "builtin",
            "file": "src/util.php",
            "line": 3429,
            "snippet": "$url      = 'https://1.1.1.1/dns-query?name=' . urlencode($query) . '&type=PTR';",
            "confidence": "high"
        },
        {
            "pattern": "hardcoded_ip_url",
            "kind": "builtin",
            "file": "src/util.php",
            "line": 3475,
            "snippet": "$url      = 'https://1.1.1.1/dns-query?name=' . urlencode($hostname) . '&type=A';",
            "confidence": "high"
        },
        {
            "pattern": "hardcoded_ip_url",
            "kind": "builtin",
            "file": "src/util.php",
            "line": 3523,
            "snippet": "$url      = 'https://1.1.1.1/dns-query?name=' . urlencode($hostname) . '&type=AAAA';",
            "confidence": "high"
        },
        {
            "pattern": "base64_decode",
            "kind": "builtin",
            "file": "src/wpcli.php",
            "line": 271,
            "snippet": "$encoded = base64_decode($data['data'] ?? '');",
            "confidence": "medium"
        },
        {
            "pattern": "base64_decode",
            "kind": "builtin",
            "file": "src/wpcli.php",
            "line": 285,
            "snippet": "$encoded = base64_decode($data['data'] ?? '');",
            "confidence": "medium"
        },
        {
            "pattern": "eval_call",
            "kind": "builtin",
            "file": "src/cms2.php",
            "line": 1807,
            "snippet": "T_EVAL           => 'eval()',",
            "confidence": "medium"
        }
    ],
    "new_finding_count": 13
}

SVN committers (2)

Accounts with actual commit access to bitfire on plugins.svn.wordpress.org, reconstructed from svn log. This is the list that matters for ownership changes — not the readme contributors.

Committer Member since Commits First commit Latest commit
Cory Marsh 2021-07-26 356 2022-06-22 · r2746728 2026-06-16 · r3574989
plugin-master 2007-03-09 1 2022-06-21 · r2746112 2022-06-21 · r2746112

Readme contributors (1)

Names the plugin's readme declares as contributors. A soft signal — anyone can be listed. The SVN access column is the ground-truth cross-reference: does this contributor actually commit code?

Contributor Member since SVN access Status
Cory Marsh 2021-07-26 356 commits Active

Versions (44 most recent)

Version Released Download
5.0.7 zip
5.0.6 zip
4.8.2 2025-09-21 · 10mo ago zip
4.8.1 2025-09-16 · 10mo ago zip
4.7.3 2025-08-28 · 11mo ago zip
4.7.2 2025-08-27 · 11mo ago zip
4.6.1 2025-08-27 · 11mo ago zip
4.7.0 2025-08-16 · 11mo ago zip
4.5.0 2025-03-04 · 1y ago zip
4.4.19 2025-02-04 · 1y ago zip
4.4.18 2024-12-23 · 1y ago zip
4.4.17 2024-11-14 · 1y ago zip
4.4.15 2024-11-03 · 1y ago zip
4.4.14 2024-08-06 · 1y ago zip
4.4.13 2024-07-24 · 2y ago zip
4.1.13 2024-07-03 · 2y ago zip
4.4.11 2024-03-29 · 2y ago zip
4.1.15 2023-10-17 · 2y ago zip
4.1.14 2023-10-10 · 2y ago zip
4.1.12 2023-10-10 · 2y ago zip
4.1.9 2023-10-05 · 2y ago zip
4.1.8 2023-09-06 · 2y ago zip
4.1.5 2023-09-06 · 2y ago zip
4.1.6 2023-08-28 · 2y ago zip
4.1.2 2023-08-26 · 2y ago zip
4.1.4 2023-08-25 · 2y ago zip
4.1.0 2023-08-19 · 2y ago zip
3.9.13 2023-08-18 · 2y ago zip
4.0.10 2023-08-18 · 2y ago zip
4.0.6 2023-08-07 · 2y ago zip
4.0.5 2023-08-04 · 2y ago zip
4.0.4 2023-08-04 · 2y ago zip
4.0.1 2023-08-03 · 2y ago zip
3.9.8 2023-03-17 · 3y ago zip
3.9.6 2023-03-16 · 3y ago zip
3.9.1 2023-02-22 · 3y ago zip
3.7.6 2023-02-09 · 3y ago zip
3.7.4 2023-02-07 · 3y ago zip
3.7.2 2023-02-01 · 3y ago zip
3.6.2 2023-01-21 · 3y ago zip
2.0.1 2022-12-21 · 3y ago zip
2.0.9 2022-12-21 · 3y ago zip
2.3.3 2022-12-21 · 3y ago zip
3.0.9 2022-12-21 · 3y ago zip