Thomson Plaza Website Hacked in 2026: Why WordPress Security Failed

WordPress SecurityWebsite Hacked SingaporeReferrer CloakingWeb SecuritySingapore SMECustom Websitethomsonplaza.com.sgWordPress Vulnerability

Thomson Plaza Website Hacked in 2026: Why WordPress Security Failed


TL;DR: On 5 April 2026, Singaporeans discovered that thomsonplaza.com.sg was serving a Turkish gambling site called Holiganbet to anyone who clicked through from Google Search or Google Maps, while showing the normal mall website to anyone who typed the URL directly. This is a textbook referrer-based cloaking attack. Thomson Plaza's WordPress installation is almost certainly the entry point. This post is a forensic breakdown of exactly how the attack works, why WordPress makes it trivially achievable, what the real business damage looks like, and why it structurally cannot happen to a custom-coded website.


What Exactly Happened to Thomson Plaza's Website?

On 5 April 2026, a Reddit user (u/jsyeo) on r/singapore posted that while trying to look up stores at Thomson Plaza, clicking the link in the mall's Google Business Profile redirected them to a foreign gambling site: Holiganbet ("Holiganbet Giriş: 2026'nın En Güvenilir Bahis Noktası", Turkish for "Holiganbet Login: The Most Reliable Betting Point of 2026").

The site that loaded was a fully rendered Turkish-language online gambling platform with betting odds, a live casino section, a mobile app promotion, and payment options. It carried the www.thomsonplaza.com.sg domain in the browser address bar. To an unsuspecting visitor, it would look as if the mall's own website had been replaced with a casino.

The attack had a particularly sophisticated quality: visiting thomsonplaza.com.sg by typing it directly into a browser showed the legitimate Thomson Plaza shopping mall website. But clicking through from Google Search results, or via the Google Maps / Google Business Profile link, consistently served the Holiganbet gambling page.

The post rapidly gained traction (over 211 upvotes on r/singapore), and within hours, technically literate community members had performed live forensic testing to confirm what was happening and why.

Key Insight: This was a server-side conditional redirect, not a visual defacement where attackers simply replace a homepage with graffiti. It was targeted specifically at Google traffic, invisible to direct visitors, and designed to persist undetected for as long as possible.

Screenshots from the Reddit post confirm what users saw:

Original Thomson Plaza website
The legitimate Thomson Plaza website as seen by direct visitors
Compromised Thomson Plaza website showing Holiganbet gambling site
The Holiganbet gambling site served to Google-referred visitors at the website

How Does Referrer-Based Cloaking Actually Work?

To understand why this attack is so effective (and so dangerous), you need to understand how browsers communicate with servers.

Every time you click a link and your browser loads a new page, it sends an HTTP request to the destination server. Bundled into that request is a collection of metadata called request headers. One of these headers is called the Referer header (note: the HTTP specification uses this specific spelling, not "Referrer").

The Referer header tells the destination server where the visitor came from. If you click a link on Google Search, your browser sends a Referer header that says, in effect: "this user arrived from https://www.google.com." If you type a URL directly into a new browser tab, no Referer header is sent; the field is empty.

This is normal, legitimate browser behaviour. Every website in the world receives this header. The difference is what the server does with it.

In the Thomson Plaza attack, a malicious script was injected into the WordPress server. That script intercepts every incoming request and reads the Referer header before deciding what to send back:

This was confirmed by r/singapore user funkyspyspy, who performed live HTTP testing: manually constructing web requests with the Referer header set to google.com consistently triggered the gambling site. Removing the header returned the normal website. The test results were documented and published to Imgur as reproducible evidence.

User Equal-Purple-4247 conducted further analysis and found:

Warning: This technique is engineered specifically to defeat manual detection. Your IT team checking the website, your web developer doing a quick test, automated uptime monitors, and even Google's own search crawlers (all of which visit URLs directly) will see the clean, legitimate page. Only end users arriving from Google Search or Maps trigger the attack. A site can be compromised and serving scam content to thousands of visitors for weeks or months before anyone notices.


The Full Attack Chain: How Attackers Get Into a WordPress Site

Understanding the Thomson Plaza incident requires understanding how attackers gain access to a WordPress installation in the first place. The attack was almost certainly not targeted at Thomson Plaza as a specific organisation. Attackers run automated, industrialised scanners continuously against WordPress sites around the world, and Thomson Plaza appears to have been caught in one of these sweeps.

Stage 1: Scanning and Target Identification

Attackers operate large-scale automated scanners (often running across thousands of compromised machines simultaneously) that crawl the internet looking for WordPress installations. Identifying a WordPress site is straightforward: the directory structure, login page at /wp-admin, and generator meta tags in the HTML source make it identifiable.

Once identified, the scanner checks which version of WordPress core, which themes, and which plugins are installed. This information is compared against publicly maintained vulnerability databases, including the CVE (Common Vulnerabilities and Exposures) database and the WordPress Vulnerability Database, to identify known, unpatched security flaws.

The time between a vulnerability being publicly disclosed and automated scanners actively exploiting it is measured in hours, not days.

Stage 2: Exploiting a Plugin Vulnerability

WordPress plugins are the primary attack surface. There are over 60,000 plugins in the official WordPress repository, with varying levels of code quality and security maintenance. A single vulnerability in a popular plugin (one installed on tens of thousands of sites) can be exploited at industrial scale.

Common classes of plugin vulnerabilities that enable this type of attack include:

Vulnerability TypeWhat It Allows an Attacker to Do
Unauthenticated File UploadUpload a malicious PHP file directly to the server without needing a login
Remote Code Execution (RCE)Execute arbitrary commands on the server by sending a crafted HTTP request
SQL InjectionExtract admin credentials from the WordPress database
Cross-Site Request Forgery (CSRF)Trick a logged-in admin into performing actions that install malicious code
Privilege EscalationGain administrator access from a lower-privilege account
Broken Access ControlAccess functionality or files that should require authentication

Based on the community's analysis confirming WordPress as the platform, the most likely entry point for the Thomson Plaza attack is one of the above, most probably an unauthenticated file upload or remote code execution flaw in an installed plugin that allowed the attacker to write malicious PHP code to the server without ever needing the WordPress admin password.

Stage 3: Injecting the Cloaking Payload

Once the attacker has write access to the server, injecting the referrer cloaking logic is the work of seconds. The payload can be as compact as a few lines of PHP, small enough to hide inside an existing legitimate-looking file and making manual discovery extremely difficult.

The injected code is typically placed in one of several locations:

The logic itself checks the incoming $_SERVER['HTTP_REFERER'] value (a standard PHP variable containing the Referer header). If the value contains a target string (such as google), the server responds with the scam content. Otherwise, it continues loading the normal WordPress site.

A critical detail that catches many site owners off-guard: the malicious payload is not always stored in PHP files at all. Security researchers and affected site operators have documented cases where the cloaking logic and redirect rules are injected directly into the WordPress database — specifically the wp_options table, wp_posts content, or wp_postmeta fields. Because traditional file-based malware scanners like Wordfence scan PHP files on the server, database-resident payloads can survive a full file cleanup undetected. The following SQL queries are the standard way to check for common injection patterns:

SELECT * FROM wp_posts WHERE post_content LIKE '%eval(base64_decode%'
OR post_content LIKE '%window.location.href%';

SELECT * FROM wp_options WHERE option_value LIKE '%eval(base64_decode%';

If either query returns results you did not place there, the database has been compromised alongside the file system.

What was observed in the Thomson Plaza case (noted by Equal-Purple-4247) is that the canonical metadata was also manipulated. This means the attacker modified the site's HTML <head> to include language-redirect tags pointing to the scam site. This is a more sophisticated touch: it means Google's indexing bots, which understand canonical and hreflang tags, could potentially pick up and index the scam URLs as associated with thomsonplaza.com.sg, compounding the SEO damage over time.

Stage 4: Establishing Persistence

A sophisticated attacker does not simply inject code and leave. They establish persistence mechanisms to ensure the compromise survives:

Backdoor accounts. A new WordPress administrator account is created with a non-obvious username, allowing re-entry even if the injected code is discovered and removed.

Multiple injection points. The cloaking payload is written to several files simultaneously. Cleaning one file while missing another means the attack resumes.

Obfuscated code. The PHP payload is often encoded using Base64 encoding, string concatenation tricks, or character substitution, so that automated malware scanners do not recognise it as malicious at a glance. Security researchers at Sucuri have documented WordPress malware that uses UTF-16 encoding specifically to evade ASCII-based detection tools.

Re-infection via vulnerable plugin. If the original plugin vulnerability is not patched after cleanup, the attacker's scanner will re-detect the unpatched installation and re-compromise it, often within 24 hours.


Request a Custom Quote

Why Does WordPress Make This So Easy?

The Thomson Plaza attack reflects architectural decisions baked into WordPress that make this entire class of attack possible, rather than being the failure of one specific plugin or one careless administrator.

WordPress was originally built as a blogging platform in 2003. Its architecture (PHP running on a server, reading from a MySQL database, with a plugin ecosystem for extensibility) reflects the technology assumptions of that era. The result is a system that, by design, executes server-side code on every single page request.

This is the fundamental enabler of referrer-based cloaking: the server is always running PHP, always capable of reading request headers, and always capable of making conditional decisions about what to send back. An injected script does not need to change the system's behaviour; it just needs to add a new conditional branch to something that was already happening.

Compare this to the WordPress plugin ecosystem:

Each plugin is an independent codebase, maintained on its own schedule, with its own security track record. A shop owner who installs a slider plugin, a contact form plugin, a calendar plugin, an SEO plugin, and a social media feed plugin has introduced five separate attack surfaces, each of which may have unpatched vulnerabilities at any given moment.

The WordPress security model also requires that the web server have write access to the file system for installing updates, uploading media, and activating plugins. This is the same write access an attacker leverages to inject malicious PHP files. The feature that makes WordPress easy to manage is the same feature that makes it easy to compromise.

Best Practice: Assume that any WordPress site running plugins not updated within the last 30 days has a measurable probability of exposure to a known, publicly disclosed vulnerability. The CVE database does not wait for site owners to apply patches before publishing vulnerability details.


How Long Has This Been Happening?

The Thomson Plaza incident is not an isolated event. It is a local, visible instance of a long-running global attack pattern.

Security research firm Sucuri has documented multiple mass-compromise campaigns targeting WordPress sites with referrer-based redirect malware. In one campaign, over 2,000 WordPress sites were simultaneously compromised by a malicious script that redirected visitors to scam pages. Dark Reading reported on a campaign by a criminal network known as VexTrio that used over 20,000 compromised WordPress sites as a traffic-routing infrastructure for redirect schemes.

The Thomson Plaza incident follows this exact playbook. The Holiganbet gambling site (a Turkish sports betting platform) is the beneficiary of hijacked search traffic, exploiting the SEO authority that thomsonplaza.com.sg has built up over years of legitimate operation as a well-known Singapore shopping mall.

Critically, one r/singapore commenter (u/CerealNumber57) noted that the same thing had previously happened to the Fish & Chicks restaurant chain's website: clicking from Google served a gambling site, while direct URL entry showed the legitimate restaurant page. This detail confirms that this attack pattern is not new in Singapore; it has been running for years, largely unnoticed because most victims never report it publicly.

The same malware family also targets paid advertising traffic, not just organic search. A case documented on r/Wordpress earlier this month described a company whose WordPress site served casino pages exclusively to visitors arriving via Facebook Ads — identified by the fbclid= URL parameter that Facebook appends to all ad click URLs. The trigger condition was different (a URL parameter rather than a Referer header), but the underlying mechanism, the business model, and the persistence techniques were identical. The attackers also added a new Google Search Console admin by uploading a verification .txt file, injected 15,000 sessions of SEO spam traffic, and installed three "empty" loader plugins to house the malicious code. This is the same playbook. Whether your traffic comes from Google Search, Google Maps, or Facebook Ads, the same malware infrastructure is watching for it.


What Is the Full Business Damage?

The consequences of a referrer cloaking attack extend far beyond the immediate embarrassment of a defaced website. The damage compounds across multiple dimensions over time.

Google Search Ranking Penalties

Google's spam policies explicitly prohibit cloaking, the practice of serving different content to Googlebot versus human visitors. When Google detects that a site is engaging in cloaking (whether deliberately or because it has been compromised), it can apply a manual action penalty, which removes the site from search results entirely, or apply algorithmic ranking demotions.

For Thomson Plaza, the risk is that Google has already begun indexing the Holiganbet content as associated with thomsonplaza.com.sg. The corrupted canonical and hreflang metadata observed by community members suggests the injected code was actively attempting to influence Google's understanding of the site's content. Undoing this indexing damage requires a manual recrawl request via Google Search Console, and Google does not guarantee any timeline for this.

Google Business Profile Credibility

The attack specifically targeted the Google Maps / Google Business Profile entry point. Users who clicked Thomson Plaza's official business profile link (an action that should be completely trustworthy) were served a gambling site. Google Business Profiles are a primary discovery channel for local businesses. A compromised profile link actively destroys the trust signal that years of positive reviews have built.

Immediate Loss of Customer Trust

Anyone who visited thomsonplaza.com.sg via Google on 5 April 2026 and saw a Turkish gambling site will remember that experience. For a family-oriented shopping mall, the brand association with gambling content is particularly damaging, with no way to reach those customers after the fact to explain what happened.

Credential Phishing and Downstream Fraud

A referrer cloaking attack gives attackers something more valuable than a one-time redirect: a trusted domain. Visitors arriving at thomsonplaza.com.sg from Google have no reason to distrust the URL in their address bar. That trust can be exploited in ways that go beyond simply displaying a gambling site.

Attackers operating scam infrastructure regularly use compromised legitimate domains as phishing landing pages. The scenario works like this: a visitor arrives expecting a mall directory, sees an unfamiliar page, and is prompted to "log in" or "verify" an account. Because the domain looks genuine, many users comply. The submitted credentials (email and password) are then harvested. Since most people reuse passwords across services, a single credential harvest from one compromised page can open access to unrelated accounts — email, banking, e-commerce platforms.

Luckily, in the Thomson Plaza case, there were no registration and payment forms in Holiganbet's content. However, if there were, any user who interacted with those forms and entered personal or payment details did so on what appeared to be a legitimate Singapore domain. Even if no credentials were harvested in this specific instance, the structural capability was present. The attacker controlled both the domain and the page content being served.

Warning: A compromised website can be a phishing platform even when it does not look like a phishing page. Visitors who interact with forms, click download links, or enter any personal information on a page served via a hijacked domain should treat those credentials as potentially compromised.

The Silent Period

Perhaps the most damaging element is the time the attack ran before being discovered. Given that the attack only triggers when the Referer header contains google.com, and given that most people checking a website (including IT staff and security tools) do so via direct URL entry, the attack may have been running for days, weeks, or longer before a regular user happened to notice and post about it publicly on Reddit.

Every day the attack ran undetected, real visitors were being redirected. Google was potentially associating gambling content with the domain. The SEO damage was accumulating silently.


How to Check If Your Own WordPress Site Is Compromised

If your business runs a WordPress website, the Thomson Plaza incident is a direct prompt to verify your own exposure. The following checks can be performed without technical expertise:

Test your own site from Google. Search for your business name or website domain on Google. Click each result from the search results page; do not type the URL directly. If you see anything other than your normal website, your site may be compromised.

Check Google Search Console. Log in to Google Search Console for your domain. Navigate to the Security and Manual Actions section. Google will flag known malware detections here. Check the Coverage report for any URLs you do not recognise.

Test with a referrer tool. Tools like REFerer.io or browser developer tools allow you to make HTTP requests with a custom Referer header. Set it to https://www.google.com and request your homepage. Compare the result to a request with no referrer.

Review recent file modifications. Via your hosting control panel (cPanel, Plesk, etc.), check which PHP files in your WordPress installation were modified recently, particularly functions.php, wp-blog-header.php, and any files in wp-content/plugins/. Modifications you did not make are a serious red flag.

Scan with a dedicated tool. Services like Sucuri SiteCheck (free) and Wordfence (WordPress plugin) scan for known malware signatures in WordPress installations. These are not infallible against novel obfuscated payloads, but they catch a significant proportion of known attack patterns.

Warning: Cleaning a compromised WordPress site by deleting the malicious file is rarely sufficient. Unless the original vulnerability is patched and all persistence mechanisms (backdoor accounts, secondary injection points) are removed, re-infection typically occurs within 24 hours.


Why Can This Not Happen to a Custom-Coded Website?

The Thomson Plaza attack required a specific architectural condition: a server running live PHP code that executes on every request and can read incoming headers to make conditional decisions. This is a fundamental characteristic of how WordPress works, shared across every installation regardless of how well it is maintained.

A custom-coded website built as a static export, the architecture Appsol Technologies uses for every client, does not have any of this: no PHP, no server-side code executing at request time, no plugin ecosystem, no admin panel.

Attack SurfaceWordPressCustom Next.js (Appsol)
Plugin vulnerabilities20–30 active plugins per site on average, each a potential entry pointNo plugins. Zero plugin attack surface.
Server-side PHP executionPHP runs on every request; injected code runs with itStatic HTML files only. No code executes on request.
CMS admin panel/wp-admin is a known, publicly enumerable attack targetNo admin panel. No login endpoint to brute-force.
DatabaseWordPress + MySQL: SQL injection and credential theft riskNo database. No queries. No credentials to steal.
Referrer-based cloakingTrivially implemented via three lines of injected PHPArchitecturally impossible. No code reads the Referer header.
File write accessRequired for updates; same access exploited for injectionBuild pipeline is separate from hosting. CDN serves read-only files.
Auto-update supply chainPlugin auto-updates can introduce malicious code from a compromised repositoryAll updates go through a version-controlled build process before deployment.

When Appsol builds a website, the Next.js framework compiles the entire site into a set of static HTML, CSS, and JavaScript files at build time. These files are then deployed to a CDN (content delivery network). When a visitor requests a page, the CDN returns a pre-built static file. There is no server reading the request, no PHP evaluating headers, no conditional logic deciding what to send.

The Referer header (the trigger mechanism in the Thomson Plaza attack) is simply never read. No code processes it; no decision is made based on it. Injecting code that reads it would require access to the build pipeline and the ability to modify the compiled output files, which are version-controlled and would require a code review to change.

An attacker who compromises the hosting environment of an Appsol-built site finds a directory of static files. There is nothing to inject, no runtime to modify, no PHP to hook into. The attack surface that made the Thomson Plaza compromise possible does not exist.

Key Insight: The Thomson Plaza attack required a specific class of architecture: live server-side code execution at request time. A statically exported website does not have that architecture. The barrier to this type of attack is structurally absent.


What Should Thomson Plaza Do Now?

For any business or development team dealing with an active or suspected referrer cloaking compromise, the response steps are:

  1. Take the site offline or put it behind a maintenance page immediately. Every hour the site remains live, real visitors are being served scam content and Google continues indexing it.

  2. Engage a WordPress security specialist, not a general web developer. Firms like Sucuri, Wordfence, and Malcare offer emergency incident response. Clean-up requires finding all injection points, not just the obvious one.

  3. Change all credentials. WordPress admin passwords, hosting panel passwords, SFTP passwords, and database passwords should all be rotated immediately, as backdoor accounts may have been created.

  4. Patch or remove every plugin and theme that has a known vulnerability. Check the WordPress Vulnerability Database for all installed plugins.

  5. Submit a reconsideration request to Google Search Console after cleanup, to remove any manual action penalty and trigger a recrawl.

  6. File a report with the Cyber Security Agency of Singapore (CSA) at go.gov.sg/report-cybercrime and the Singapore Police Force's cybercrime portal, particularly if customer data may have been accessed.

  7. Audit for re-infection at 24 hours, 72 hours, and 7 days after cleanup. If the original vulnerability remains, re-infection is near-certain.


Key Terms Explained


Ready to build your vision?

The Thomson Plaza incident is a predictable outcome of running a PHP-based CMS in an environment where automated attackers continuously scan for known vulnerabilities. WordPress sites do get compromised; the only open question is when.

At Appsol Technologies, every website we build is a statically exported Next.js site: no PHP, no plugins, no admin panel, no runtime execution. The architectural conditions that made the Thomson Plaza attack possible do not exist in our builds.

If your business currently runs on WordPress and you want an honest assessment of your risk exposure, or if you're ready to move to a platform where this class of attack is not just unlikely but structurally impossible, talk to us today or view our plans starting from $50/month.


References

The following sources informed this analysis:

Ready to build something similar?

Let's discuss how we can engineer this for your business.

Start a Project