apoBank quishing letter → PhaaS panel on GHOSTnet, 91-domain fleet
Assessment
Withheld. This register publishes checks, not conclusions.
Checks
The site's public Next.js build manifest exposes a complete multi-tenant phishing-panel route structure, including victim-session capture, multi-domain management, a template builder, an alerter and a fast-flux page
sortedPages includes: /[access] (catch-all that loads the identical chunk set as the index page, i.e. the personalised-code landing handler), /auth/login, /auth/logout, /backend, /backend/admin, /backend/admin/[id], /backend/alerter, /backend/banned, /backend/custom-templates, /backend/dashboard, /backend/domains, /backend/domains/[id], /backend/expired, /backend/fastflux, /backend/logs, /backend/logs/[id], /backend/panel-logs, /backend/profile, /backend/sessions, /backend/sessions/[id], /backend/templates/builder/[id], /stats/[domain]. Declared rewrites proxy /api/:path* and /api/nauth/:path* to a backend API.
GET https://ap-ocdc.app/_next/static/InoWSkoBQImJOmdMVCPfy/_buildManifest.js (a public static asset explicitly linked from the root HTML); read __BUILD_MANIFEST sortedPages and __rewrites. No /backend or /auth path was requested.Observed 2026-08-24 14:29Z
Source hxxps://ap-ocdc[.]app/_next/static/InoWSkoBQImJOmdMVCPfy/_buildManifest.js · archived 404 — gone by capture time
apoBank's official security page carries a dated warning of 14.08.2026 describing this exact letter template — one week before the letter's own printed date of 21.08.2026
Entry headed "14.08.2026 | Betrugsmasche: Gefälschte Briefe mit QR-Code zur 'Verifizierung'" states that postal phishing letters styled like official apoBank correspondence are in circulation, claiming a required "Verifizierung" has not been completed, threatening deactivation of apoBank-App, Online-Banking and apoTAN unless the enclosed QR code is scanned, and that the QR code leads to a fake website harvesting online-banking credentials and further personal data. Every one of those elements is present in the case letter, which is dated 21.08.2026 and headed "Die Verifizierung Ihrer Daten ist ausstehend". The same page states the bank never asks customers to verify digital access by letter and QR code, and gives fraud hotline +49 211 59794 7777 (Mon-Fri 07:00-20:00, Sat 09:00-16:00).
GET https://www.apobank.de/service/sicherheit, strip tags, locate the dated "Aktuelle Meldungen und Sicherheitshinweise" entriesObserved 2026-08-24 14:33Z · source
The host cloaks: standard crawler paths are redirected off-site to wikipedia.de through the referrer-stripping redirector href.li, while the personalised path is reserved for victims
GET https://ap-ocdc.app/robots.txt and GET https://ap-ocdc.app/sitemap.xml both redirect to https://href.li/?https://wikipedia.de, which serves a meta-refresh plus window.location.replace to https://wikipedia.de with meta name="referrer" content="no-referrer". By contrast the bare root returns a Next.js 404 and /_next/static/* assets serve normally with HTTP 200. A legitimate site has no reason to redirect robots.txt to Wikipedia through a referrer anonymiser; this is deliberate evasion of crawlers, blocklist scanners and analysts, and is coherent with the /backend/banned route present in the kit's build manifest.
fetch of the two standard well-known paths /robots.txt and /sitemap.xml with a browser user-agent, observing the redirect chain and final URL. No personalised or guessed victim path was requested at any point.Observed 2026-08-24 14:36Z
Source hxxps://ap-ocdc[.]app/robots.txt · archived 404 — gone by capture time
ap-ocdc.app was created 2026-08-21 08:57:24 UTC — the same calendar day the postal letter is dated (Düsseldorf, den 21.08.2026)
RDAP events: registration 2026-08-21T08:57:24.780Z, expiration 2027-08-21T08:57:24.780Z, last changed 2026-08-21T08:57:24.937Z. Status: ["add period","client transfer prohibited"] — i.e. still inside the 5-day ICANN add-grace period at time of check (2026-08-25). Registrar: GNAME.COM PTE. LTD., IANA ID 1923 (Singapore).
curl -sS https://pubapi.registry.google/rdap/domain/ap-ocdc.app (authoritative .app registry RDAP); cross-checked via https://rdap.org/domain/ap-ocdc.appObserved 2026-08-25 12:26Z · source
The host does not serve a single fake bank page — it serves a full phishing-as-a-service control panel, whose route list is published by its own Next.js build manifest
_buildManifest.js for build -RsevR6KUB8IDNx2FX59E declares 25 routes: / , /404, /_error, /[access], /auth/login, /auth/logout, /backend, /backend/admin, /backend/admin/[id], /backend/alerter, /backend/banned, /backend/custom-templates, /backend/dashboard, /backend/domains, /backend/domains/[id], /backend/expired, /backend/fastflux, /backend/logs, /backend/logs/[id], /backend/panel-logs, /backend/profile, /backend/sessions, /backend/sessions/[id], /backend/templates/builder/[id], /stats/[domain]. The only victim-facing route is the dynamic catch-all /[access] — which is why the bare root 404s while a personalised QR path resolves. Manifest captured, sha256 fcea39a8dc82511b180bf3960cebf4a662528bb1ef91a9c96efb9eea1064b0a9.
capture_url https://ap-ocdc.app/_next/static/-RsevR6KUB8IDNx2FX59E/_buildManifest.js then `node -e 'global.self={};eval(fs.readFileSync(...));Object.keys(self.__BUILD_MANIFEST)'`Observed 2026-08-25 12:27Z
Source hxxps://ap-ocdc[.]app/_next/static/-RsevR6KUB8IDNx2FX59E/_buildManifest.js · archived copy
The victim-facing /[access] page branches on a "referenzcode" prop, and the kit exposes an API route /api/domains/verify-reference-code — the exact mechanism the printed letter instructs the victim to use
Page bundle for /[access] (chunk pages/[access]-37422e11ce2c6ee6.js) begins: `e.default = n => { if (n.referenzcode) return jsx(_.Z,{hostname:n.hostname}); ... }`. Kit bundles also contain the German strings "Dein Referenzcode: " and "Bitte geben Sie Ihre Zugangsdaten ein.", and the client references /api/domains/verify-reference-code and /api/domains/verify-captcha-v2 and -v3. The letter's Schritt 2 is "Geben Sie dort Ihre Referenznummer ein" with a printed "Referenzcode".
Fetched the manifest-declared chunk static/chunks/pages/[access]-37422e11ce2c6ee6.js (curl -g), beautified with js-beautify; grep -rhoE '"/api/[^"]*"' over all 65 manifest-declared assetsObserved 2026-08-25 12:27Z
Source hxxps://ap-ocdc[.]app/_next/static/chunks/pages/%5Baccess%5D-37422e11ce2c6ee6.js · archived copy
Three different domains serve a byte-identical gate page from the same Next.js build id, proving one centrally-deployed fleet
ap-ocdc.app (5.231.5.249), ap-ocdc.com (5.231.5.253) and aktualisierun-apo.app (5.231.5.238) all return HTTP 404 from Server: nginx/1.26.3 with X-Powered-By: Next.js and buildId "-RsevR6KUB8IDNx2FX59E". The response bodies are identical: sha256 92ca5c85ab7870ffcc5514dc7121240c1cfa6ad4fc034bce01ca6adfc26189f8 for all three. Only the cookie name is templated per host: visited_ap-ocdc_app / visited_ap-ocdc_com / visited_aktualisierun-apo_app, each true, Max-Age=2592000, HttpOnly, SameSite=lax. All three sit in GHOSTnet's 5.231.5.0/24 or adjacent /24s and use a/b/c.dnspod.com. ap-ocdc.com was registered 2026-08-11 (Realtime Register B.V.), aktualisierun-apo.app 2026-08-12 (GNAME.COM PTE. LTD., same registrar as the target).
curl -sS -D - https://{ap-ocdc.app,ap-ocdc.com,aktualisierun-apo.app}/ ; sha256sum of the captured bodies; dig +short A/NS each; RDAP via rdap.org for registration dates and registrarsObserved 2026-08-25 12:41Z · source
The same kit build artefacts appear on 91 distinct hostnames scanned publicly since 2026-01-30, almost all on GHOSTnet AS12586, impersonating apoBank and at least eight other financial brands
Searching urlscan.io by the SHA-256 of two of the target's own kit chunks — pages/_app-c79f7141db85929b.js (023914ebba65bc81b15e170ddd2155c4754724ed9b89da2f03580b38c5bf1add, 127 scans) and pages/404-8ef6862fcda17cb4.js (a50f045c14ea0b5852105970104f07716eb75028b25e6b3620a69dbe6d844867, 150 scans) — yields 91 distinct hostnames, earliest scan 2026-01-30 (bnb-recovery.com), latest 2026-08-20 (m.ap-ocdc.com). apoBank-targeted names include apo-banken.com, apobanken.cc, apo-bankportal.cc, apo-bank-portale.com, apo-bank-service.com, apo-bank-seite.com, apo-bank-updates.com, apo-banka.com, apobank.co, apo-kundencenter.com, apo-kundenverifizierung.com, apo-verifikation.com/.cc, apoverifikation.com, apo-verfizierung.com, apo-einloggen.com, apo-formular(e).com, apo-datenaktualisierung.com, apo-daten-aktuell.com, apo-datenlive.com, apo-sicheres.com, apo-nunaktualisieren.com, apoaktualisierung.com, apo-aktualisierung.com, ap-ocdc.com. Other brands: commerz-aktivierungen/-portalhilfe/-reaktivierungen/-stornierungen.com and coba-sicherheitsaktion.com (Commerzbank), poba-servicehilfe.com (Postbank), comdi-portalhilfe.com and cd-ueberpruefung/cd-uberprufen.com (comdirect), consors-portalhilfe.com (Consorsbank), vr-storno.com (Volksbanken), spk-sicherheit.com (Sparkasse), bwbank-kundenportal.com, bbvaseguridad.com and bancoaccesso.com/bancacceso.com (BBVA/Spanish banks), o2-supporthilfe.com and o2online-portal.com (O2), mali-ionos.com (IONOS), mailer-nfity.com (Nifty). Observed IPs are overwhelmingly 5.230.x/5.231.x and 2a00:12d8:700e::/… i.e. GHOSTnet GmbH AS12586, with brief excursions to CloudWebManage 185.181.8.54, Linode 139.162.x and Baxet 2a00:b700::. 98 of 100 sampled scans carry page title "404 – Page Not Found", i.e. the public scanners only ever saw the same gate, never the phishing content.
curl --get https://urlscan.io/api/v1/search/ --data-urlencode "q=hash:<sha256>" --data-urlencode size=100, for the two chunk hashes; hostnames taken from task.url, IP/ASN from page.ip/page.asnname. Control: the same endpoint returns 159 results for an unrelated hash and 0 for a hash that is not indexed, so both positive and zero results are meaningful.Observed 2026-08-25 12:41Z · source
The kit's client bundles contain German-language templates that harvest online-banking credentials, PINs, TAN/photoTAN/pushTAN codes, girocard PINs and card data for dozens of brands, and reference fake banking-app APK downloads
Strings recovered from the manifest-declared bundles include "Bitte geben Sie Ihre Zugangsdaten ein.", "Anmeldename/Legitimations-ID oder PIN ist falsch.", "Bitte überprüfen Sie VR-NetKey, PIN und BIC.", "Bitte geben Sie Ihre 4-stellige Girocard-PIN zur Bestätigung Ihrer Identität ein.", "Bitte geben Sie Ihre Kreditkarteninformationen ein, um Ihre Identität zu verifizieren.", "Bitte geben Sie die auf Ihrem TAN-Generator angezeigte TAN ein.", "Auftrag in pushTAN-App freigeben", "photoTAN-Aktualisierung", "Startcode für Ihre SmartTAN", "Bankkonto verifizieren", "Apobank (Deutsche Apotheker- und Ärztebank)", "Dein Referenzcode: ". Field-type options include cc-number, cc-expire, iban. Brand logo assets served from the host include /apobank.svg, /apobankat.png, /comdirect.png, /Santander.png, /Volksbank.svg, /targobank.png, /bawag.png, /raiffeisench.png, /sozialbank.png, /ziraat.png, /amex.png plus webmail logos (/gmail.png, /gmx.png, /outlook.png, /aol.png, /mailcom.png). The bundles reference APK-download endpoints /api/logs/download-apk/apotan, /db, /pp, /BBVA, /ziraat — i.e. fake "apoTAN", Deutsche Bank, PayPal, BBVA and Ziraat mobile apps. A live unauthenticated GET of /api/logs/download-apk/apotan returns HTTP 500 with a JSON body (27 bytes), so the route exists but did not serve a file to an unauthenticated caller. Over 1,000 distinct external hostnames are referenced across the bundles, including several hundred individual Volksbank/Sparkasse websites, consistent with a bank-selector list.
Downloaded all 65 asset files listed in _buildManifest.js (curl, brackets fetched with curl -g), then grep -rhoE over the set for quoted strings, /api/ paths, image paths and external hosts; js-beautify for readabilityObserved 2026-08-25 12:41Z
Source hxxps://ap-ocdc[.]app/_next/static/-RsevR6KUB8IDNx2FX59E/_buildManifest.js · archived copy
The "BESTSUITE" service named inside the panel runs the same codebase at private.bestsuite.cc, on an IP that also hosts live sibling phishing deployments
The panel's fastflux page contains the help text "Du kannst auch Domains eingeben, die nicht im Panel registriert sind (z.B. bestsuite.cc)", a "BESTSUITE User" table column, an /api/fastflux/bestsuite-domains route and an isBestsuiteIp flag. bestsuite.cc resolves to 5.231.3.201 (GHOSTnet, AS12586, netname DE-GHOSTNET-FRA-GN-HOSTING-VPS) and 301-redirects to https://private.bestsuite.cc, which returns HTTP 200 from nginx/1.26.3 with X-Powered-By: Next.js and the identical buildId "-RsevR6KUB8IDNx2FX59E", the same chunk filenames, and __NEXT_DATA__ pageProps {"template":null,"userId":null,"settings":null} — i.e. the same victim-template renderer with no template assigned. Its TLS leaf is CN=private.bestsuite.cc, Let's Encrypt YE1, notBefore 2026-07-03. The same address 5.231.3.201 currently answers for four sibling campaign domains: apo-datenaktualisierung.com, bbvaseguridad.com, o2online-portal.com and bnb-wiederherstellung.com. bbvaseguridad.com and bnb-wiederherstellung.com return the same 404 gate with the same build id and cookies visited_bbvaseguridad_com / visited_bnb-wiederherstellung_com; o2online-portal.com 307-redirects to https://href.li/?https://wikipedia.de, a referrer-stripping decoy (href.li also appears in the kit's own host list). bestsuite.cc was registered 2024-04-02 via Internet Domain Service BS Corp and uses the same a/b/c.dnspod.com nameservers as the target.
grep for 'bestsuite' across the manifest-declared bundles; dig +short A bestsuite.cc private.bestsuite.cc; curl -sS -D - https://{bestsuite.cc,private.bestsuite.cc,apo-datenaktualisierung.com,bbvaseguridad.com,o2online-portal.com,bnb-wiederherstellung.com}/ ; openssl s_client -connect 5.231.3.201:443 -servername private.bestsuite.cc; rdap.org for bestsuite.ccObserved 2026-08-25 12:45Z · source
The sponsoring registrar is GNAME.COM PTE. LTD. (Singapore), IANA registrar ID 1923, with registrant data not published
Registrar: GNAME.COM PTE. LTD.; IANA ID 1923; abuse contact vCard "Lili Zhang", legal@gname.com, tel:+65.65189986; registrar RDAP https://rdap.gname.com/domain/ap-ocdc.app; no registrant/admin/tech entity published (RDRS referral only)
Same RDAP response, entities[] with roles ["registrar"] and nested roles ["abuse"]; publicIds IANA Registrar IDObserved 2026-08-24 14:27Z · source
ap-ocdc.app resolves to 5.231.5.249, a VPS-hosting address of GHOSTnet GmbH in Germany
A record 5.231.5.249 (TTL 600); RIPE inetnum 5.231.5.0 - 5.231.5.255, netname DE-GHOSTNET-FRA-GN-HOSTING-VPS, descr "GHOSTnet Network used for VPS Hosting Services", country DE, route 5.231.5.0/24, mnt-by GHOSTNET-MNT, abuse-mailbox abuse@ghostnet.de
dig +noall +answer ap-ocdc.app A; whois 5.231.5.249Observed 2026-08-24 14:27Z
The only TLS certificate for the host is a 90-day Let's Encrypt certificate whose validity begins 2026-08-21, minutes after the domain was created
subject CN=ap-ocdc.app; issuer C=US, O=Let's Encrypt, CN=YE2; serial 0678818B9970CE6F9FFA0DA8B44BB08E6CDA; notBefore Aug 21 08:08:49 2026 GMT; notAfter Nov 19 08:08:48 2026 GMT; single SAN DNS:ap-ocdc.app (no www SAN despite www resolving). Let's Encrypt sets notBefore one hour before actual issuance, so issuance was approx 09:08 UTC on 2026-08-21, about 11 minutes after the 08:57:24 UTC domain creation.
openssl s_client -connect ap-ocdc.app:443 -servername ap-ocdc.app </dev/null | openssl x509 -noout -subject -issuer -serial -dates -ext subjectAltNameObserved 2026-08-24 14:28Z
The deployed kit's static assets carry a Last-Modified timestamp 19 seconds before the domain itself was created, indicating automated provisioning rather than hand-built one-off site
Asset _buildManifest.js Last-Modified: Fri, 21 Aug 2026 08:57:05 GMT. RDAP domain registration: 2026-08-21T08:57:24.780Z. Delta: kit deployment artefact is 19 s earlier than domain creation; TLS issuance followed at approx 09:08 UTC. Full observed provisioning window from deploy to working HTTPS phishing host: about 11 minutes.
Compare Last-Modified response header on the static asset with the RDAP registration event timestampObserved 2026-08-24 14:29Z
Certificate Transparency shows exactly one certificate has ever been issued for ap-ocdc.app or any subdomain, dated 2026-08-21, confirming the domain had no prior life
Single issuance record id 16654217416; cert_sha256 bb7888493817ccf74657c4610f375d0b3b4b59261e10ea9cf427b904f5d1db62; dns_names ["ap-ocdc.app"] only; issuer Let's Encrypt CN=YE2; not_before 2026-08-21T08:08:49Z; not_after 2026-11-19T08:08:48Z; revoked false. No sibling hostnames appear in the issuance, and no other subdomain has ever been certified.
GET https://api.certspotter.com/v1/issuances?domain=ap-ocdc.app&include_subdomains=true&expand=dns_names&expand=issuer (SSLMate Cert Spotter CT aggregator; crt.sh was returning HTTP 502 throughout)Observed 2026-08-24 14:31Z · source
The letter's footer reproduces apoBank's genuine imprint details exactly but lists only three of the five current Vorstand members, omitting Thomas Runge and Sylvia Wilhelm
apoBank official imprint (retrieved 2026-08-24) states: Deutsche Apotheker- und Ärztebank eG, Richard-Oskar-Mattern-Straße 6, 40547 Düsseldorf; BLZ 300 606 01; BIC DAAEDEDDXXX; Vorsitzender des Aufsichtsrats Dr. med. dent. Karl-Georg Pochhammer; Vorstand: Matthias Schellenberg (Vorstandsvorsitzender), Heiko Drews, Thomas Runge, Dr. Christian Wiermann, Sylvia Wilhelm; Eintragung Amtsgericht Düsseldorf GnR 410. The letter matches on address, BLZ, BIC and the Aufsichtsrat chairman, but its Vorstand block reads only "Matthias Schellenberg, Heiko Drews, Dr. Christian Wiermann" — two sitting board members are missing and Schellenberg's Vorstandsvorsitzender title is dropped. The footer is therefore copied from genuine apoBank material that is no longer current.
GET https://www.apobank.de/impressum, strip tags, compare imprint block against the letter transcript in operator-notes.mdObserved 2026-08-24 14:31Z · source
German medical self-governance bodies have publicly warned about the same postal apoBank QR-code fraud, describing it as a large-scale campaign targeting healthcare professionals
Kassenärztliche Bundesvereinigung (KBV) practice-news warning of 25.06.2025 and KV Nordrhein warning of 26.06.2025 both describe criminals sending letters in apoBank's name whose QR code leads to a counterfeit site that captures online-banking credentials on "Anmelden", and both direct victims to apoBank's fraud hotline 0211 59794-7777. KVWL and HÄVN published parallel warnings. This establishes the postal-QR method against apoBank customers as a recurring campaign predating the case letter by more than a year, not a novel one-off.
Web search; sources kbv.de praxisnachrichten 06-25-extra, kvno.de aktuelles, kvwl.de aktuelles, kzvnr.de aktuellesObserved 2026-08-24 14:33Z · source
The signatory "Wolfgang Brandt, IT-Organisator" is a fictitious persona reused across this campaign; the role does not exist at apoBank
KV Rheinland-Pfalz states the fraudulent letters bear the forged signature of "IT-Organisator Wolfgang Brandt". MEDI Südwest e.V. lists the same name as a red flag and states explicitly that this function does not exist at apoBank ("diese Funktion gibt es bei der apoBank nicht"). Pharmazeutische Zeitung reports counterfeit apoBank letters to pharmacies purportedly signed by "IT-Organisator Wolfgang Brandt". The identical name and invented job title in the case letter therefore ties it to the same campaign; no such person or role is evidenced at apoBank. apoBank's Vorstand and published organisational information contain no "IT-Organisator" function.
Web search for the exact string "IT-Organisator Wolfgang Brandt"; cross-checked against apoBank's imprint and board pages, which show no such roleObserved 2026-08-24 14:34Z · source
The letter's central premise — a "gesetzlich vorgeschriebene" (legally mandated) verification of digital banking access via QR code — is contradicted by the bank itself
The letter asserts that without "dieser gesetzlich vorgeschriebenen Verifizierung" the recipient's apoBank-App, Online-Banking and apoTAN-App access will be restricted, payment orders will cease and incoming credits will be returned to sender. apoBank's own security page states the bank does not ask customers by letter to "verify" digital access via QR code, and that it never requests access credentials or TANs outside its official website and app. No provision of German banking law requires a customer to re-verify online-banking access by scanning a QR code in a letter and entering a printed reference code on a third-party website. The threat that incoming credits would be "retourniert" has no basis in SEPA credit-transfer handling for an otherwise valid account.
Compare letter transcript against apoBank's published security guidance at https://www.apobank.de/service/sicherheit. Note: the legal characterisation is a reading of the absence of any such duty, not a formal legal opinion.Observed 2026-08-24 14:35Z · source
As of 2026-08-24 the domain has no public scan or report history, indicating it is still live and not yet blocklisted
urlscan.io search page.domain:ap-ocdc.app returned total 0; search page.ip:"5.231.5.249" returned total 0. The host was serving normally during this investigation (HTTP 200 on static assets at 14:29-14:36 UTC on 2026-08-24), and plain HTTP on port 80 issues a 301 to https://ap-ocdc.app/. Combined with the 2026-08-21 registration this means the domain is three days old, active, and absent from at least one major public scan corpus.
GET https://urlscan.io/api/v1/search/?q=page.domain:ap-ocdc.app and ?q=page.ip:"5.231.5.249"; curl -D - http://ap-ocdc.app/Observed 2026-08-24 14:36Z · source
The domain has exactly one certificate in certificate transparency, a Let's Encrypt leaf whose validity begins 2026-08-21 08:08:49 UTC
Certspotter returns 1 issuance for ap-ocdc.app (include_subdomains=true): issuer "C=US, O=Let's Encrypt, CN=YE2", dns_names ["ap-ocdc.app"], notBefore 2026-08-21T08:08:49Z, notAfter 2026-11-19T08:08:48Z, not revoked, cert_sha256 bb7888493817ccf74657c4610f375d0b3b4b59261e10ea9cf427b904f5d1db62. The live TLS handshake on 5.231.5.249:443 with SNI ap-ocdc.app presents the same leaf (serial 0678818B9970CE6F9FFA0DA8B44BB08E6CDA, SAN: ap-ocdc.app only). Let's Encrypt backdates notBefore by one hour, so actual issuance was ≈09:08Z, ≈11 minutes after the domain was created; there is no CT record of the name before 2026-08-21.
curl "https://api.certspotter.com/v1/issuances?domain=ap-ocdc.app&include_subdomains=true&expand=dns_names&expand=issuer"; openssl s_client -connect 5.231.5.249:443 -servername ap-ocdc.app | openssl x509 -noout -subject -issuer -serial -dates -ext subjectAltName. crt.sh returned an empty JSON array for the same query.Observed 2026-08-25 12:26Z · source
ap-ocdc.app resolves to a single German VPS at GHOSTnet GmbH (AS12586) on both IPv4 and IPv6, with DNSPod (Tencent) nameservers and no mail configuration
A 5.231.5.249; AAAA 2a00:12d8:700e:0:fe4b:5d91:2db6:4725; www.ap-ocdc.app → same A. NS a/b/c.dnspod.com (SOA a.dnspod.com, RNAME domainadmin.dnspod.com, serial 1787303963). No MX, no TXT (therefore no SPF), no CAA. RIPE: 5.231.5.0-5.231.5.255 netname DE-GHOSTNET-FRA-GN-HOSTING-VPS, descr "GHOSTnet Network used for VPS Hosting Services", country DE, route 5.231.5.0/24 origin AS12586, abuse-mailbox abuse@ghostnet.de. IPv6 falls in 2a00:12d8::/29, org ORG-GG3-RIPE "GHOSTnet GmbH", same abuse-c GN-RIPE.
dig +short {A,AAAA,MX,TXT,NS,SOA,CAA} ap-ocdc.app @1.1.1.1; whois 5.231.5.249; whois 2a00:12d8:700e:0:fe4b:5d91:2db6:4725Observed 2026-08-25 12:27Z
The panel's own API surface shows live victim-session relaying, Telegram alerting, captcha gating, per-domain statistics and a "fastflux" proxy/IPv6 rotation subsystem tied to an upstream service at bestsuite.cc
API routes referenced by the client bundles include /api/sessions, /api/sessions/changeSite, /api/logs/create, /api/logs/upload, /api/logs/upload-code, /api/logs/fetch-bank-logo?url=, /api/domains/add, /api/domains/install, /api/domains/proxy, /api/domains/status, /api/domains/verify-reference-code, /api/domains/verify-captcha-v2, /api/domains/verify-captcha-v3, /api/bans, /api/custom-templates, /api/alerter/domains, /api/panel-logs, and 21 /api/fastflux/* routes (activate-proxy, activate-dedicated-proxy, assign-proxy, switch-proxy, set-proxy-ipv6, apply-all-ipv6, set-global-ip, bulk-buy, buy-status, install-cert, install-proxy, reinstall-all, verify-dns, add/remove-external-domain, bestsuite-domains, list-*). UI strings include "Aktuelle Live Sessions", "LIVE", "Bot Token wurde erfolgreich geändert.", "Chat ID speichern", "Meine Abonnements", "Passwort für /stats/domain Zugang...", "BESTSUITE User", and a help text reading "Du kannst auch Domains eingeben, die nicht im Panel registriert sind (z.B. bestsuite.cc)." The panel UI language is German throughout. An unauthenticated GET of /api/domains returns HTTP 401 with a 43-byte JSON body; /backend and /auth/login return HTTP 200 shells for the same build id. No credentials were submitted and no authenticated route was accessed.
grep over the 65 manifest-declared bundles for '"/api/...' and for quoted UI strings; curl -s -o /dev/null -w '%{http_code}' against /backend, /auth/login, /api/domains (GET only)Observed 2026-08-25 12:41Z
Source hxxps://ap-ocdc[.]app/auth/login · archived copy
The apoBank logo served by the phishing host is a byte-identical copy of a file published on apoBank's own website
https://ap-ocdc.app/apobank.svg (HTTP 200, image/svg+xml, 1933 bytes) has sha256 87fc265414c0b17c24bd9075309ceed6792a1eb34463367420cdf33f4524de29, identical to https://www.apobank.de/.resources/apocore/webresources/assets/favicon/safari-pinned-tab.svg. The file's embedded metadata reads "Created by potrace 1.1", inherited from apoBank's original. (apoBank's main logo file apobank_logo_zusatz.svg hashes differently, fed2a2217d0df22b335b49b48b374408d6c583a92e92a8066f4934b5a26c8b24, so the match is specific to the pinned-tab asset.)
curl https://ap-ocdc.app/apobank.svg | sha256sum vs curl https://www.apobank.de/.resources/apocore/webresources/assets/favicon/safari-pinned-tab.svg | sha256sumObserved 2026-08-25 12:42Z
Source hxxps://ap-ocdc[.]app/apobank.svg
apoBank published a warning about this exact postal QR-code letter on 14.08.2026, one week before the letter is dated and before the domain was registered
apoBank's security page carries a dated entry "14.08.2026 | Betrugsmasche: Gefälschte Briefe mit QR-Code zur „Verifizierung“" stating that postal phishing letters styled like official apoBank correspondence are in circulation, that they claim a required "Verifizierung" is incomplete, that they threaten deactivation of apoBank-App, Online-Banking and apoTAN if the enclosed QR code is not scanned, and that the QR code leads to a fake website harvesting online-banking credentials. Recognition markers it lists include a QR code with the instruction "Hier bitte scannen" and the claim of an outstanding "Verifizierung" — both present verbatim in the letter under investigation. The same page also carries an 11.08.2026 entry about fake apoBank online-banking links appearing in search-engine results and a 20.08.2026 entry about follow-up phone calls; 23 dated fraud entries in total.
Fetched https://www.apobank.de/service/sicherheit and extracted text with BeautifulSoup, then regex for dated entries /\d{2}\.\d{2}\.20\d{2}\s*\|/Observed 2026-08-25 12:43Z · source
The signatory "Wolfgang Brandt, IT-Organisator" is a recurring fake identity in this campaign, and German professional bodies state the role does not exist at apoBank
Warnings published by German healthcare-profession bodies describe letters bearing the same forged signature: KV Rheinland-Pfalz ("Warnung vor Phishing: gefälschte Apobank-Schreiben an Praxen im Umlauf", 25.06.2025) refers to the forged signature of "IT-Organisator Wolfgang Brandt"; MEDI Südwest e.V. lists as a warning sign an unusual sender, "IT-Organisator Wolfgang Brandt", adding that this function does not exist at apoBank; Pharmazeutische Zeitung (13.06.2025) describes the same threat wording about apoBank-App, Online-Banking and the apoTAN application being deactivated and payment orders and credits no longer being processed. Further warnings about the same postal QR-code scheme come from KVWL (26.06.2025), Landeszahnärztekammer Thüringen (26.06.2026) and Zahnärztekammer Schleswig-Holstein. This establishes that the same template, signatory and threat wording have been in postal circulation since at least June 2025 — over a year before the 21.08.2026 letter in this case. Note: apoBank does not publish a staff directory, so the non-existence of the person was not independently verified against a primary register; the statement rests on the professional bodies' publications.
web_search for '"Wolfgang Brandt" apoBank IT-Organisator' and for apoBank postal QR-code phishing warnings; source URLs kv-rlp.de, medi-suedwest.de, pharmazeutische-zeitung.de, kvwl.de, lzkth.de, zahnaerzte-sh.deObserved 2026-08-25 12:43Z · source
The letter claims repeated prior reminders and a statutory verification duty, yet the domain its QR code points to was created at 08:57 UTC on the letter's own date
The letter is dated "Düsseldorf, den 21.08.2026" and opens "trotz mehrfacher Erinnerungen haben wir von Ihnen bislang keine abgeschlossene Verifizierung ... erhalten", asserting a "gesetzlich vorgeschriebene Verifizierung" without citing any legal basis, and threatening that credits will be returned to the sender ("Gutschriften werden an den Absender retourniert"). ap-ocdc.app was created 2026-08-21T08:57:24Z and its only TLS certificate has notBefore 2026-08-21T08:08:49Z; the domain therefore did not exist during any of the claimed earlier reminders. apoBank's published guidance and the Zahnärztekammer Schleswig-Holstein warning both state the bank does not ask customers by letter to verify digital access via QR code.
Cross-read the operator's verbatim letter transcript against the RDAP registration event and the Certspotter/openssl certificate dates; apoBank statement from https://www.apobank.de/service/sicherheit (entry 14.08.2026)Observed 2026-08-25 12:45Z
85 of the 91 correlated campaign hostnames were observed on GHOSTnet GmbH (AS12586) address space; the remaining six sat briefly on CloudWebManage and Linode in February 2026
Of 91 hostnames correlated by identical kit-chunk hashes, 85 had at least one urlscan observation with page.asnname containing "GHOSTNET" (GHOSTnet GmbH, DE). The six without are apobanken.cc, apo-bankportal.cc and commerz-aktivierungen.com (CloudWebManage-EU / 185.181.8.54) and apo-bank-portale.com, bwbank-kundenportal.com and commerz-portalhilfe.com (Akamai-Linode / 139.162.x), all observed 2026-02-13 to 2026-02-23 — a short excursion before the campaign settled back onto GHOSTnet. Observed GHOSTnet address ranges: 5.230.26/55/57/69/70/73/75/76/77/78/95/122/194/250.x, 5.231.2/3/4/5.x and 2a00:12d8:700e::/48.
Parsed page.asnname and page.ip from the urlscan search results for the two kit-chunk hashes and counted hostnames with/without a GHOSTnet observation (script over the saved siblings.json)Observed 2026-08-25 12:52Z
The domain is delegated to DNSPod (Tencent) nameservers and publishes no MX, TXT, SPF, DMARC or CAA records — it is a web-only host, not a mail domain
NS a.dnspod.com, b.dnspod.com, c.dnspod.com (TTL 21600). A 5.231.5.249 and www 5.231.5.249. MX: none. TXT: none. _dmarc TXT: none. CAA: none. DNSSEC: delegationSigned false. Also an AAAA record not previously noted: 2a00:12d8:700e:0:fe4b:5d91:2db6:4725
dig +noall +answer ap-ocdc.app {A,AAAA,NS,MX,TXT,CAA}; dig _dmarc.ap-ocdc.app TXT; secureDNS from RDAPObserved 2026-08-24 14:27Z
The bare root of ap-ocdc.app serves a Next.js static-export 404 page and sets a host-named tracking cookie, indicating content is gated behind the personalised path rather than absent
HTTP 404 from server nginx/1.26.3, x-powered-by: Next.js, etag "waoww0j9za13x"; sets cookie visited_ap-ocdc_app=true; Path=/; Max-Age=2592000 (30 days); HttpOnly; SameSite=lax. Embedded __NEXT_DATA__ shows page "/404", buildId "InoWSkoBQImJOmdMVCPfy", nextExport true, autoExport true. Cookie name is templated from the hostname, an artefact of the kit rather than of Next.js itself.
GET https://ap-ocdc.app/ with browser user-agent; read response headers and __NEXT_DATA__ JSON in bodyObserved 2026-08-24 14:28Z
Source hxxps://ap-ocdc[.]app/ · archived 404 — gone by capture time
The letter's sender line uses the brand short form "apoBank eG", which is not the bank's registered legal name
Letter sender line: "apoBank eG, Richard-Oskar-Mattern-Straße 6, 40547 Düsseldorf". Registered legal name per the bank's own imprint and Amtsgericht Düsseldorf GnR 410 is "Deutsche Apotheker- und Ärztebank eG". "apoBank" is a brand/wordmark, and "apoBank eG" is not a registered firm designation; genuine correspondence carries the full legal name in the sender line, which the letter reserves for the signature block only.
Compare letter transcript sender line with legal name and register entry published at https://www.apobank.de/impressumObserved 2026-08-24 14:31Z · source
The two Vorstand members missing from the letter's footer have both sat on apoBank's board since 1 January 2023, so the copied stationery is at least three and a half years out of date
apoBank's own newsroom announcement of 08.09.2022 records that Thomas Runge and Sylvia Wilhelm were appointed to the Vorstand effective 1 January 2023 (Wilhelm succeeding Eckhard Lüdering, taking the risk portfolio). apoBank's board page confirms Sylvia Wilhelm has been a member since 1 January 2023. Both are absent from the letter's footer, which is dated 21.08.2026 — the footer therefore cannot reflect the bank's board at any point in the three and a half years before the letter was printed.
Web search corroborated against apobank.de/ueber-die-apobank/das-unternehmen/organe-gremien/vorstand and newsroom.apobank.de press release "apoBank beruft zwei neue Vorstandsmitglieder"Observed 2026-08-24 14:33Z · source
The case letter is a softened revision of the documented template: same signatory and same three-service threat, but the threatened consequence is downgraded from "fully deactivated" to "restricted"
Pharmazeutische Zeitung's report of the documented wave quotes the letter as threatening that without the mandatory verification, access to the apoBank app, Online-Banking and the apoTAN application would be "vollständig deaktiviert", and closes with "Wir empfehlen Ihnen, die Verifizierung zeitnah vorzunehmen, um eine Sperrung Ihrer digitalen Zugänge sowie Unterbrechungen..." The case letter threatens instead that the same three services will be "eingeschränkt", and closes "Wir empfehlen Ihnen dringend, die Verifizierung baldmöglichst durchzuführen, um eine Sperrung Ihrer digitalen Zugänge und Unterbrechungen Ihres Zahlungsverkehrs zu vermeiden." Same structure, same three named services, same closing sentence skeleton, different intensifiers — indicating an iterated template rather than a copy of a single fixed document.
Compare the operator's verbatim letter transcript against the quoted wording in the Pharmazeutische Zeitung report of the same campaignObserved 2026-08-24 14:34Z · source
The phishing netblock is announced by AS12586 (ASGHOSTNET, GHOSTnet GmbH, Germany)
Origin AS for 5.231.5.249: "12586 | 5.231.5.0/24 | DE | ripencc | 2012-09-11"; AS12586 described as "ASGHOSTNET - GHOSTnet GmbH, DE" (registered 1999-08-05). Abuse contact for both the IPv4 and IPv6 assignments is abuse@ghostnet.de.
dig +short 249.5.231.5.origin.asn.cymru.com TXT; dig +short AS12586.asn.cymru.com TXTObserved 2026-08-24 14:36Z
The bare root returns a Next.js 404 from nginx/1.26.3 and sets a 30-day tracking cookie; the current Next.js build id is -RsevR6KUB8IDNx2FX59E
HTTP/1.1 404, Server: nginx/1.26.3, X-Powered-By: Next.js, set-cookie: visited_ap-ocdc_app=true; Path=/; Max-Age=2592000; HttpOnly; SameSite=lax. Body embeds __NEXT_DATA__ with "page":"/404","buildId":"-RsevR6KUB8IDNx2FX59E","nextExport":true. Captured body sha256 92ca5c85ab7870ffcc5514dc7121240c1cfa6ad4fc034bce01ca6adfc26189f8. This build id differs from the InoWSkoBQImJOmdMVCPfy id observed on an earlier run, i.e. the deployment has been rebuilt at least once since.
curl -sS -D - https://ap-ocdc.app/ with a browser User-Agent; capture_url of the same URLObserved 2026-08-25 12:27Z
Source hxxps://ap-ocdc[.]app/ · archived 404 — gone by capture time
As of 2026-08-25 the domain was still resolving normally on Quad9 and Cloudflare's malware-filtering resolvers, and had never been submitted to urlscan.io
ap-ocdc.app returns 5.231.5.249 from 1.1.1.1, from 1.1.1.2 (Cloudflare malware-blocking) and from 9.9.9.9 (Quad9). Controls confirm both filters are live: 9.9.9.9 returns an empty answer for internetbadguys.com while 1.1.1.1 returns 146.112.59.12; 1.1.1.2 returns 0.0.0.0 for malware.testcategory.com while 1.1.1.1 returns 104.18.4.35/104.18.5.35. urlscan.io search returns total=0 for both page.domain:ap-ocdc.app and page.ip:5.231.5.249, while an unrelated control query on the same endpoint returns 159 results. AlienVault OTX passive DNS for 5.231.5.249 holds exactly one record: ap-ocdc.app, first 2026-08-22T04:52:50, last 2026-08-22T04:53:21 — i.e. a dedicated address for this one domain.
dig +short ap-ocdc.app @{1.1.1.1,1.1.1.2,9.9.9.9} with the two control names; curl urlscan.io/api/v1/search with page.domain and page.ip queries; curl otx.alienvault.com/api/v1/indicators/IPv4/5.231.5.249/passive_dnsObserved 2026-08-25 12:42Z
The letter's Vorstand footer lists only three of apoBank's five current board members, matching a board composition that ended in December 2022
Letter footer: "Matthias Schellenberg, Heiko Drews, Dr. Christian Wiermann". apoBank's own Impressum lists five: "Matthias Schellenberg, Vorstandsvorsitzender / Heiko Drews / Thomas Runge / Dr. Christian Wiermann / Sylvia Wilhelm". Thomas Runge was appointed to the board effective 1 January 2023 (Ärzte Zeitung, 08.09.2022, "apoBank beruft zwei neue Vorstandsmitglieder"), together with Sylvia Wilhelm. The Aufsichtsrat chair in the letter, "Dr. med. dent. Karl-Georg Pochhammer", does match the Impressum, as do the sender line "Richard-Oskar-Mattern-Straße 6, 40547 Düsseldorf", "BLZ: 300 606 01" and "BIC: DAAEDEDDXXX". The template therefore appears to have been copied from genuine apoBank stationery predating January 2023 and never updated.
Compared the operator's verbatim letter transcript against text extracted from https://www.apobank.de/impressum; appointment date from a web search result (aerztezeitung.de, dated 08.09.2022)Observed 2026-08-25 12:43Z · source
Every generic path on the host returns the identical 1,437-byte 404 gate, while the kit's brand assets, operator panel and API respond normally — the domain is gated, not parked
Observed on 2026-08-25 with GET only: / → 404 (1437 bytes), /robots.txt → 404 (1437), /favicon.ico → 404 (1437), /sitemap.xml → 404 (1437) — all four bodies sha256 92ca5c85ab7870ffcc5514dc7121240c1cfa6ad4fc034bce01ca6adfc26189f8. By contrast /apobank.svg → 200 image/svg+xml 1933 bytes; /backend → 200 text/html 1445 bytes; /auth/login → 200 text/html 1611 bytes; /api/domains → 401 application/json 43 bytes; /api/logs/download-apk/apotan → 500 application/json 27 bytes. A generic-path 404 on this host must therefore not be read as "domain inactive" — the victim-facing content lives only on the dynamic /[access] route reached from the personalised QR path.
curl -g -s -o /dev/null -w '%{http_code} %{content_type} %{size_download}' for each path; sha256sum on the captured bodiesObserved 2026-08-25 12:52Z
Source hxxps://ap-ocdc[.]app/robots.txt · archived 404 — gone by capture time
No sibling hostnames could be established on 5.231.5.249 from the passive sources reachable in this environment; the campaign's other domains remain unidentified
HackerTarget reverse-IP lookup for 5.231.5.249 returned "No DNS A records found" (HTTP 200, quota not exhausted). Cert Spotter shows no other certified hostname for ap-ocdc.app. crt.sh, which would allow pattern searching for apo-*/ap-*/-apobank* siblings, returned HTTP 502 on every attempt. This is a negative result from a limited dataset and must not be read as evidence that the host serves only one domain — the /backend/domains and /backend/fastflux routes in the kit imply the opposite.
GET https://api.hackertarget.com/reverseiplookup/?q=5.231.5.249; repeated GET https://crt.sh/?q=... (502 throughout); Cert Spotter issuances queryObserved 2026-08-24 14:35Z
The supplied scan of the letter carries no EXIF, XMP or PNG text metadata, so it yields no independent provenance for the printing or scanning device
exiftool reports only structural PNG properties (1320x1932, 8-bit RGB, non-interlaced, Deflate) and filesystem timestamps. PNG chunk walk shows 30 chunks consisting of IHDR + IDAT + IEND only, with no tEXt, iTXt, zTXt, eXIf or tIME chunks. SHA-256 of the artefact: c0c450fb2621cef0b84d4e0df01cbdec32c8824728b5e3a2631aeee783c89d16. Consistent with the operator's statement that redactions were burned in and metadata stripped; no attempt was made to recover redacted content.
exiftool attachments/apobank-letter-redacted.png; sha256sum; python3 PNG chunk-type enumerationObserved 2026-08-24 14:37Z
The supplied scan contains no machine-readable barcode; the personalised QR URL and Referenzcode were not recovered and were not needed
zbarimg decodes zero symbols from attachments/apobank-letter-redacted.png (1320x1932 RGB PNG, 1,791,710 bytes), confirming both the QR code and the postal 2D matrix code were destroyed by the burned-in redaction. exiftool reports no EXIF/XMP/IPTC blocks, no Producer/Creator and no GPS — only PNG structural fields — consistent with the operator's statement that metadata was stripped. No personalised path on ap-ocdc.app was requested at any point in this investigation; all target requests were to / , /robots.txt, /favicon.ico, /sitemap.xml, /apobank.svg, /backend, /auth/login, /api/domains, /api/logs/download-apk/apotan and to asset paths named by the site's own _buildManifest.js.
zbarimg -q --raw attachments/apobank-letter-redacted.png (exit 0, no output); exiftool attachments/apobank-letter-redacted.pngObserved 2026-08-25 12:45Z
Neither ap-ocdc.app nor ap-ocdc.com has any snapshot in the Internet Archive, so the names have no prior benign use
The Wayback availability API returns {"archived_snapshots": {}} for ap-ocdc.app, and the CDX index returns an empty array for both url=ap-ocdc.app* and url=ap-ocdc.com* (limit 20/10, collapse=urlkey). Combined with a single CT issuance dated 2026-08-21 and an RDAP creation event on the same day, there is no evidence the label was ever used for anything before this campaign.
curl "http://archive.org/wayback/available?url=ap-ocdc.app"; curl "https://web.archive.org/cdx/search/cdx?url=ap-ocdc.app*&output=json&limit=20&collapse=urlkey" and the same for ap-ocdc.comObserved 2026-08-25 12:52Z