Confidential · Prepared for company leadership

Security Health Report

Consumer Sketch & CS Web Solutions — your websites, servers, and email
Prepared 28 July 2026 · re-verified 29 July 2026 Reviewed 10 domains & 11 servers Method: outside-in inspection (no passwords used)
Urgent
Action
Required
Overall health Poor — needs attention now

I examined your company’s internet systems the way a stranger on the internet would see them. I found five serious problems — any one of which could let a criminal take over a server, damage your client websites, or send convincing fake email from your own addresses. These are not theoretical worries: for several of them, working break-in instructions are already published on the internet — and for one of them, America’s cybersecurity agency confirms criminals are using it in real attacks right now.

The good news: every problem in this report is fixable, most of them quickly and cheaply. The single biggest job is replacing one old server that hosts about ninety of your clients’ websites. Step-by-step fix commands live inside each problem card above — the order to do them in is at the end of this report.

5serious problems
fix this week
6important problems
fix this month
6housekeeping items
fix when convenient

Your systems at a glance

Each part of your setup, marked the way a doctor marks a chart.

Client website hosting one server holds ~90 client sites (csweb.ca and others)
Urgent
Build & test system (Jenkins) your developers’ workshop, visible to the whole internet
Urgent
Code vault & VPN machine operating system out of support — its door locks themselves are up to date, verified
Attention
Email protection 4 of your 9 active addresses can be faked by scammers
Urgent
Older hosting account cswebsolutions.com — no protective shield, aging panel
Attention
Client WordPress sites needs small updates and tidying
Attention
Website shield (Cloudflare) working properly on 8 of your 10 domains
Good
Office email (Microsoft 365 / Zoho) the mailboxes themselves are professionally hosted
Good

Serious problems — fix this week

Written in plain English. The strip under each problem gives the full technical evidence.

Problem 1 of 5 · Most urgent

The server hosting ~90 client websites stopped getting security repairs over a year ago

What’s wrong
One computer — the one holding almost all of your csweb.ca client sites — runs software that was abandoned by its maker in June 2024. It has not received a single security repair since. On top of that, its website-serving software is from 2018, and its website-management panel has a known flaw that lets a complete stranger run commands on it without any password.
What could happen
Think of it as an apartment building where the locksmith quit a year ago and the master-key design was printed in the newspaper. One break-in could hit all ~90 of your clients at once — their sites defaced or filled with malware, their data stolen, and your company’s name on the apology letters. This is not hypothetical: America’s cybersecurity agency (CISA) confirms this exact flaw is being used in real attacks right now.
What to do
Start planning this week to move the client sites to a modern, maintained server. This is the biggest job in this report — begin now, finish within the month.
Danger 9.0 / 10 · attacks happening now
Fix it — step by step
  1. Today: find the panel’s exact version and update it if it’s behind — this closes the hole that is being attacked right now (commands below).
  2. Today: lock the panel’s doorways so only your office can reach them.
  3. This week: order a new server on a supported system (Rocky Linux 9 or AlmaLinux 9) and have the panel reinstalled fresh on it.
  4. This month: move client sites in small batches — a few each night, test each batch, then switch the addresses. Retire the old machine only after two quiet weeks.
Commands & config
# ── Run on the server (ask your host for SSH access if needed) ──

# 1) What panel version are we on? (vulnerable = below 0.9.8.1205)
grep -ri "version" /usr/local/cwpsrv/htdocs/resources/admin/include/ 2>/dev/null | head -5
#   from outside instead:
curl -sk https://203.88.158.10:2087/login/ | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -1

# 2) Update the panel NOW (fixes the actively-attacked flaw)
sh /scripts/update_cwp

# 3) Lock panel ports to your office IP only (CWP's firewall tool):
csf -a YOUR.OFFICE.IP.HERE "office - panel admin"
#    then edit /etc/csf/csf.conf, remove 2083 & 2087 from TCP_IN, and run:
csf -r

# 4) Does the 2018 web server even use the vulnerable video module?
nginx -v
nginx -V 2>&1 | grep -o with-http_mp4_module
#    if that prints a match, remove any 'mp4;' lines in /etc/nginx/nginx.conf, then:
nginx -t && systemctl reload nginx

# 5) Rebuild target: Rocky Linux 9 / AlmaLinux 9, current nginx, current panel.
#    Your host can usually do the account migration for you — ask them.
Technical details & evidence
Server 203.88.158.10 (YOU Telecom, India) — CentOS-WebPanel default page visible Affected software CentOS 7 (EOL 30 Jun 2024, all packages unpatched since) · nginx 1.14.1 (2018) · CentOS-WebPanel (exact version unconfirmed — verify ≥ 0.9.8.1205) Known vulnerabilities CVE-2025-48703 — CWP unauthenticated OS command injection (filemanager changePerm, t_total parameter), CVSS 9.0 · CISA KEV (actively exploited) · EPSS 100%; needs a valid non-root username; fixed in 0.9.8.1205
CVE-2022-41741 — nginx mp4 module heap overflow → RCE, CVSS 7.8
CVE-2021-23017 — nginx resolver 1-byte overwrite → RCE, CVSS 7.7
CVE-2022-41742, CVE-2018-16843/44, CVE-2024-7347 — further nginx issues
Plus every RHEL7-family kernel/glibc/OpenSSL CVE published since June 2024. Fix Rebuild on Rocky Linux 9 or AlmaLinux 9 with current nginx; update CWP to latest; migrate sites in batches.
Problem 2 of 5

Your developers’ build system is open to the entire internet

What’s wrong
The machine your team uses to build and test software (called Jenkins) can be reached by anyone in the world, on a public address, with no protective shield in front of it. Tools like this are a favourite target because they hold the keys to everything your developers make.
What could happen
Whoever gets in can read your source code, steal saved passwords, and quietly change the software you ship to clients — a so-called supply-chain attack, where your own updates carry their malware.
What to do
Today: block public access so only your office or VPN can reach it. This takes under an hour and changes nothing about how the team works.
Danger 9.0 / 10
Fix it — step by step
  1. Right now (5 minutes): close the public door on port 8080 — your team’s work inside is not affected.
  2. This week: give the team a safe way in — an SSH tunnel (works today) or a free Cloudflare Tunnel (permanent, no open doors at all).
  3. Then: sign in, update Jenkins and every plugin, and switch on the built-in security options.
Commands & config
# 1) Close the public door NOW (on the server):
sudo ufw deny 8080/tcp
sudo ufw allow from YOUR.OFFICE.IP to any port 8080 proto tcp
sudo ufw enable

# 2) Prove it's closed — from any OUTSIDE connection (should hang, not answer):
curl -m 5 http://14.99.151.148:8080/login

# 3) Safe access, option A — SSH tunnel (works today, zero setup):
ssh -N -L 8080:localhost:8080 user@14.99.151.148
#    then open http://localhost:8080 in your browser

# 4) Safe access, option B — Cloudflare Tunnel (free, permanent):
cloudflared tunnel login
cloudflared tunnel create jenkins
cloudflared tunnel route dns jenkins jenkins.consumer-sketch.com
#    then remove the 8080 rule from step 1 — nothing needs to listen publicly

# 5) Inside Jenkins afterwards:
#    Manage Jenkins → Plugins → Update all
#    Manage Jenkins → Security → require login; enable matrix/role authorization
Technical details & evidence
Server 14.99.151.148 — Jenkins on port 8080, no CDN/WAF coverage Also on this machine nginx + a Laravel “ChatBot AI” application (ports 80/443), unidentified service on 8443, phpMyAdmin path present. robots.txt allows all crawling; default nginx welcome page still served on port 80. Fix Put Jenkins behind Cloudflare Access (Zero Trust) or restrict by firewall to office/VPN IPs. Audit Jenkins plugins and version once access is restricted; review build logs for unexpected jobs.
Problem 3 of 5

Your oldest hosting account may let strangers walk straight into the control panel

What’s wrong
Your cswebsolutions.com account sits on an older shared-hosting setup in the US whose control panel had a serious “skip the login screen” flaw announced in April 2026. The newest activity we can see on that account dates to June 2025 — before the fix — which makes it likely, though not certain, to be vulnerable. It also has no protective shield in front of it: every doorway is visible to the internet, including staff-only ones.
What could happen
Full control of the account: every site and mailbox on it, plus the ability to quietly add their own content under your name.
What to do
This week: ask the hosting company (Liquid Web) two questions — “What version is my panel?” and “Was it patched after April 2026?” If not patched, insist on an immediate update. Then put the domain behind a protective shield.
Danger 8.5 / 10
Fix it — step by step
  1. Today: send one support ticket to Liquid Web — the exact words to paste are below.
  2. If the panel is behind the April 2026 fix, ask them to update it immediately. It’s routine and free.
  3. Once confirmed patched: put the domain behind Cloudflare and remove the wildcard address record (see Important item 1).
Commands & config
# ── Paste this into the Liquid Web support ticket ──
#   "Please confirm the cPanel & WHM version on my server (69.167.158.49),
#    and whether it includes the 28 April 2026 security release fixing the
#    session-management authentication bypass (CVE-2026-41940).
#    If it does not, please run an update immediately."

# ── Or, if you have root SSH access, check and fix it yourself ──
/usr/local/cpanel/cpanel -V          # prints the version
/scripts/upcp --force                # runs the update

# ── Two more one-minute protections in WHM afterwards ──
#   WHM → Security Center → cPHulk: ON   (stops password-guessing robots)
#   WHM → Two-Factor Authentication: ON  (for the root account)
Technical details & evidence
Server 69.167.158.49 (Liquid Web / ExactHosting, US) — Apache + cPanel/WHM; ports 80, 443, 2083, 2087, 2096 open; wildcard DNS resolves every subdomain here; no CDN/WAF Evidence of age (a clue, not proof) Newest “magic revision” asset timestamp decodes to 17 Jun 2025 — predates the April 2026 patch window. The panel may still have been updated another way; only the host can confirm. Known vulnerabilities CVE-2026-41940 — cPanel & WHM session-management authentication bypass, CVSS 9.1, fixed 28 Apr 2026 (status here: unverified)
CVE-2026-28780 — Apache httpd heap buffer overflow (if unpatched)
CVE-2025-24530 — bundled phpMyAdmin < 5.2.2 XSS Fix Confirm cPanel version with the host; update if pre-April-2026. Move DNS to Cloudflare for WAF coverage. Remove wildcard DNS; publish explicit records only.
Problem 4 of 5

Scammers can send perfect fake email from four of your addresses

What’s wrong
Email has three standard “anti-forgery” protections (think of them as a wax seal, a signature, and instructions for what to do with fakes). Four of your nine active domain names have none of the third protection and some are missing all three. One domain — cswebsolutions.com — has no protections whatsoever.
What could happen
Anyone in the world can send email that looks exactly like it came from you — to your clients, your bank, your staff. A single convincing “please pay this invoice” message from your address is all it takes. You would never see the fake messages, only the angry replies.
What to do
Add the missing protection records at your DNS provider. It is a one-hour DNS job per domain and costs nothing.
Danger 8.0 / 10
Fix it — step by step
  1. For each unprotected address, add the two small records below wherever your domain names are managed (the DNS page). It’s about an hour per domain.
  2. Watch the reports — they start arriving by email and show who’s sending as you.
  3. After two clean weeks, tighten “quarantine” to “reject” so fakes are deleted on sight.
Commands & config
# ── cswebsolutions.com (sends NO mail — lock it down completely) ──
@      TXT  "v=spf1 -all"
_dmarc TXT  "v=DMARC1; p=reject; rua=mailto:dmarc@consumer-sketch.com"

# ── csweb.ca · cssolutions.us · csdigital.info · csdigital.ca ──
_dmarc TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc@consumer-sketch.com; pct=100"
#    after two clean weeks: change p=quarantine → p=reject

# ── consumersketch.in — replace the broken record with ONE clean line ──
@      TXT  "v=spf1 include:zoho.in ~all"

# ── Verify each change afterwards ──
dig +short TXT cswebsolutions.com
dig +short TXT _dmarc.cswebsolutions.com
dig +short TXT consumersketch.in | grep spf
Technical details & evidence
Domains with no DMARC at all cswebsolutions.com (also no SPF, no DKIM, no MX) · csweb.ca · cssolutions.us (also no DKIM) · csdigital.info · csdigital.ca Also broken consumersketch.in — SPF record contains escaped newlines (\010) which breaks validation, and authorises three providers at once (Zoho + Elastic Email + Google). In good shape consumer-sketch.com, consumer-sketch.in, cswebsolutions.ca — full SPF + DKIM + DMARC quarantine policies (via Microsoft 365 / PowerDMARC). Fix Publish DMARC p=quarantine with aggregate reporting, move to p=reject after two clean weeks. For cswebsolutions.com add SPF, DKIM and DMARC from scratch. Rewrite the consumersketch.in SPF as one clean record.
Problem 5 of 5

The computer running your code vault and VPN uses an out-of-support operating system

What’s wrong
This machine’s operating system (Ubuntu 20.04) passed the end of its free support period in May 2025 — newly found flaws in most of its software no longer get free repairs. Two silver linings, honestly reported: its remote-login software itself is fully up to date (we checked against Ubuntu’s own records), and a widely reported “master key” flaw in that software does not apply to this machine. The real exposure is everything else on the box: your code vault (GitLab) and the VPN gateway, both reachable from the internet, sitting on an operating system that may no longer be repaired.
What could happen
Code vaults like GitLab are among the most-attacked products on the internet, precisely because they hold source code and saved secrets; new flaws are announced nearly every month. If the system underneath is no longer being repaired, each announcement is a fresh worry — and this one box holds your code, your internal network doorway, and your developers’ sign-ins all at once.
What to do
This week: ask one question — “Are we paying for Ubuntu’s extended support (Ubuntu Pro)?” If yes, confirm it’s actually enabled on this machine. If no, plan the move to a current Ubuntu within the month. Either way, make sure the code vault itself is up to date, and consider limiting who can even see the remote-login door.
Danger 7.5 / 10
Fix it — step by step
  1. One question, one command: is Ubuntu’s extended support (Pro) switched on for this machine?
  2. If yes — relax a little, and make sure it covers all packages, not just some.
  3. If no — attach the free tier (covers up to 5 machines) or plan the move to Ubuntu 24.04.
  4. Either way: check the code vault’s own version and update it; consider limiting who can see the remote-login door.
Commands & config
# 1) Is extended support active? (on the server)
pro status

# 2) If not — attach the free tier (token from https://ubuntu.com/pro):
sudo pro attach YOUR_TOKEN_HERE
sudo apt update && sudo apt upgrade -y

# 3) …or move the whole system (test on a clone first!):
sudo do-release-upgrade        # 20.04 → 22.04, then run again → 24.04

# 4) How old is the code vault (GitLab)?
sudo gitlab-rake gitlab:env:info | grep -i version
#    upgrade path per https://docs.gitlab.com/ee/update/ then:
sudo apt update && sudo apt install gitlab-ce

# 5) Optional: only your office/VPN may even SEE the login door:
sudo ufw allow from YOUR.OFFICE.IP to any port 22
sudo ufw delete allow 22
Technical details & evidence
Server 14.99.151.149 — SSH banner: OpenSSH_8.2p1 Ubuntu-4ubuntu0.13; ports 22, 80, 443, 8443 open Verified clear (re-checked 29 Jul 2026) CVE-2024-6387 “regreSSHion” — not applicable: Ubuntu tracker lists focal as not-affected (flaw introduced in OpenSSH 8.5p1; this server runs 8.2p1)
CVE-2023-38408 ssh-agent RCE — patched: fix shipped in 1:8.2p1-4ubuntu0.8; banner shows 0.13 (latest focal build, 24 Apr 2025) Remaining risk Ubuntu 20.04 standard support ended 31 May 2025; without Ubuntu Pro/ESM, all other packages are unmaintained. GitLab CE version not externally visible — GitLab ships security fixes almost monthly; confirm current. Pritunl build stamp 2026-04-15. Fix Verify Ubuntu Pro (pro status) or upgrade to Ubuntu 24.04 LTS. Confirm GitLab version. Consider SSH source-IP allowlist, or move SSH behind the VPN.

Important — fix this month

Less urgent than the five above, but each is a real exposure. Book them in.

Item 1 of 6

cswebsolutions.com has no protective shield in front of it

In plain terms
Eight of your ten domains sit behind Cloudflare — a service that filters out attackers before they reach you. cswebsolutions.com stands bare on the internet, and its “wildcard” address setup means even made-up addresses (anything.cswebsolutions.com) lead to your server. Move it behind the same shield and publish only the addresses you actually use.
Fix it — step by step
  1. Sign in to Cloudflare and add cswebsolutions.com — the free plan is enough.
  2. Cloudflare shows two “nameserver” names. Enter them at Network Solutions (where the domain is registered), replacing the current ones (ns9/ns10.worldnic.com).
  3. In Cloudflare’s address list (DNS), delete the “*” wildcard entry and add only the addresses you truly use (www, mail, and so on).
  4. Switch on the free protections: “WAF managed rules” and rate limiting. Done — the shield is up.
Technical details & evidence
Wildcard A record → 69.167.158.49; Network Solutions DNS; no WAF. Move nameservers to Cloudflare, replace wildcard with explicit records, enable WAF managed rules.
Item 2 of 6

Client WordPress sites need a short tidy-up

In plain terms
One checked client site (alpinegraphics.csweb.ca) runs a page-builder add-on with a known information-leak flaw, leaves an old “remote control” door (xmlrpc) wide open for password-guessing robots, and publicly lists its admin username. All three are ten-minute fixes a WordPress person does routinely. The core WordPress itself, happily, is up to date.
Fix it — step by step
  1. Update the page-builder add-on (Elementor) to 3.35.8 or newer — one click in the site’s admin under Dashboard → Updates.
  2. Close the old remote-control door (xmlrpc.php) — a two-line file change, below.
  3. Hide the public username list, and rename the obvious admin account so guessing robots have nothing to aim at.
Commands & config
# A) Close xmlrpc.php — add to the site's .htaccess:
<Files xmlrpc.php>
  Require all denied
</Files>

# B) Hide the user list — add to the theme's functions.php:
add_filter('rest_endpoints', function ($eps) {
  unset($eps['/wp/v2/users'], $eps['/wp/v2/users/(?P<id>[\d]+)']);
  return $eps;
});

# C) Rename the admin (never the site name as a username):
wp user update 1 --user_login=YOUR_NEW_NAME   # or: Users → Edit

# D) Update the page-builder (needs 3.35.8+):
wp plugin update elementor                    # or: Dashboard → Updates
Technical details & evidence
148.113.189.150 (OVH) — WordPress 7.0.2 (patched: CVE-2026-60137, CVE-2026-63030) + Elementor 3.34.3 (CVE-2026-1206, info exposure, fixed in 3.35.8). xmlrpc.php answers system.listMethods (brute-force/pingback abuse). /wp-json/wp/v2/users exposes admin alpinegr (ID 1). wp-cron.php publicly callable. Fix: update Elementor, disable XML-RPC, restrict REST user endpoint, rename admin account, system-cron instead of wp-cron.
Item 3 of 6

Hidden settings files on two apps deserve a check

In plain terms
Your custom web applications keep their passwords and master keys in a settings file that must never be visible to visitors. On one application, our knock on that door was answered with “keep out” rather than “nothing here” — which proves the file exists and is sitting where it shouldn’t be reachable. Also confirm the apps are not left in “developer mode”, which can leak those same secrets on any error page.
Fix it — step by step
  1. Tell the web server to refuse every hidden (dot) file — one small rule, below.
  2. Set “production” and “debug off” in each application’s settings file.
  3. Test it yourself: visit the address with /.env — you want “404 not found”, not “403 keep out”, and certainly not the file itself.
Commands & config
# A) nginx — add INSIDE the server {} block, then reload:
location ~ /\.(?!well-known) { return 404; }
#    check + apply:  nginx -t && systemctl reload nginx

# Apache instead — add to the site's .htaccess:
RedirectMatch 404 /\..*

# B) In each app's .env file:
APP_ENV=production
APP_DEBUG=false

# C) Verify — must print 404:
curl -sk -o /dev/null -w "%{http_code}\n" https://140.238.249.60/.env
Technical details & evidence
140.238.249.60 (Laravel “Anand Ashram”, Apache): /.env → HTTP 403 (exists, blocked — verify backup variants .env.bak/.old/.save are also denied). Same review on 14.99.151.148 (“ChatBot AI”). Set APP_DEBUG=false, APP_ENV=production. Laravel/Livewire versions unconfirmed — check against CVE-2025-54068 (Livewire ≤ 3.6.3 RCE).
Item 4 of 6

One email address book has a misprinted entry

In plain terms
The consumersketch.in anti-forgery record is printed with stray line-breaks inside it, which can make receiving mail systems throw it out entirely — meaning legitimate email may sometimes be treated as suspicious, and the protection fails open. It also authorises three different email companies at once; keep only the ones you really use.
Fix it — step by step
  1. Wherever consumersketch.in’s domain settings live (DNS page), replace the current SPF entry with the single clean line shown in Problem 4’s command block.
  2. Send a test email to any Gmail address, open it, choose “Show original” — the SPF line should read PASS.
Technical details & evidence
Current: v=spf1 a mx\010include:_spf.elasticemail.com\010include:_spf.google.com include:zoho.in include:zohomail.in ~all — literal \010 sequences and five mechanisms. Replace with one clean record (e.g. v=spf1 include:zoho.in ~all if Zoho is the only sender).
Item 5 of 6

Several systems hide their version numbers, so their health can’t be confirmed from outside

In plain terms
Your code vault (GitLab), the Laravel apps, the VPN box, and the Apache web servers don’t advertise their version numbers — good practice — but it also means this outside-in report cannot confirm whether they’re patched. Have someone with the passwords sign in and verify each is current. An internal audit (with access) is the natural next step after the fixes above.
Fix it — step by step
  1. Sign in to each system and write down exact version numbers: the code vault (GitLab), both custom apps, PHP, Jenkins, the VPN box, and the panel on the old hosting account.
  2. Check each number against its maker’s “latest version” page — every project lists one.
  3. Update anything behind. This same list becomes the checklist for the internal audit below.
Technical details & evidence
Unversioned from outside: GitLab (14.99.151.149), Pritunl (build 202604152203), Apache (4 servers), PHP (all Laravel apps), Jenkins (14.99.151.148:8080), CWP exact build (203.88.158.10). Recommend credentialed audit: Nessus/OpenVAS + authenticated config review, then OWASP ZAP/Burp authenticated testing of the three web apps.
Item 6 of 6

Your main websites send none of the standard safety notices

In plain terms
Websites can attach a short list of standard safety instructions for every visitor’s browser — don’t let strangers frame this page, don’t accept downgraded connections, don’t guess at file types. Six of your seven main sites send none of them. The risk today is modest, but the fix is an hour with tools you already have, and it closes off clickjacking and connection-downgrade tricks.
Fix it — step by step
  1. In Cloudflare (free), add one rule that attaches the five standard safety notices to every page — settings below, no server changes needed.
  2. Repeat on the servers not behind Cloudflare (two-line addition, below).
  3. Re-test any site — all five notices should now appear.
Commands & config
# ── Cloudflare (covers 8 of 10 domains) ──
# Dashboard → your domain → Rules → Transform Rules → Modify Response Header:
Strict-Transport-Security  max-age=31536000; includeSubDomains
X-Content-Type-Options     nosniff
X-Frame-Options            SAMEORIGIN
Referrer-Policy            strict-origin-when-cross-origin
Permissions-Policy         camera=(), microphone=(), geolocation=()

# ── Same thing on your own nginx servers (inside server {}) ──
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# ── Verify ──
curl -sI https://www.cswebsolutions.ca | grep -iE 'strict-transport|x-content|x-frame'
Technical details & evidence
Checked 7 www endpoints on 29 Jul 2026; only consumersketch.in returns any of the 7 key headers (it has 3: X-Content-Type-Options, X-Frame-Options, X-XSS-Protection). None present on: consumer-sketch.com/.in, cswebsolutions.ca, csweb.ca, cswebsolutions.com, api.consumer-sketch.com. Also noted: cswebsolutions.ca is WP Engine-hosted (x-powered-by) with an optimizer layer disclosing x-two-version: 2.33.0; csweb.ca root 301-redirects to cswebsolutions.ca. consumer-sketch.com was intermittently unresponsive during re-checks — add uptime monitoring.

Housekeeping — fix when convenient

Small leaks and untidiness. None are emergencies; all are cheap to fix and make the whole setup tidier.

AA ten-year-old forgotten webpage is still live (proposal.cswebsolutions.ca, last touched May 2016). Retire it or rebuild the machine — ancient software is a quiet risk.
BYour shared mail server’s name records are tangled (one address answers to three different names). Ask the provider to set one clean name; tangled records hurt email delivery and look unprofessional to spam filters.
COne mail server carries email for several domains at once. If it ever fails or is compromised, everything goes quiet together. Ask about splitting, or move the domains to your existing Microsoft 365.
DA “welcome to nginx!” placeholder page is publicly visible on one server. Harmless, but it advertises that the machine is only half-configured. Replace with a blank page.
EWordPress background-task page is publicly callable. A robot could keep it busy to slow the site down. Fix: add define('DISABLE_WP_CRON', true); to wp-config.php, schedule a real system task every 15 minutes, then block wp-cron.php at the server.
FConfirm backups exist — and actually restore. This report can’t see your backups from outside. Once a quarter, have someone restore one client site to a test machine. A backup that has never been tested is a hope, not a backup.

Appendix — the technical record

Everything below this line is written for your technical team or security firm. It lists the exact machines, addresses, software, and flaw serial numbers behind each plain-English finding above. Method: external, unauthenticated inspection only (DNS, certificate-transparency logs, HTTP fingerprinting, public CVE databases). No systems were touched beyond what any internet visitor could do.
1 · Confirmed and suspected vulnerabilities, by severity
CVE / IDSeveritySoftwareWhereSummary
CVE-2025-487039.0 crit · KEVCentOS-WebPanel <0.9.8.1205203.88.158.10Unauthenticated OS command injection (filemanager changePerm, t_total param); needs a valid non-root username; CISA KEV — actively exploited; EPSS 100%
CVE-2026-419409.1 crit*cPanel & WHM69.167.158.49Session auth bypass; fixed 28 Apr 2026 — *suspected, version unverified
SEC-HEADERSmedWeb (main www sites)6 of 7 sitesNo HSTS / CSP / X-Frame-Options / X-Content-Type-Options / Referrer-Policy / Permissions-Policy — only consumersketch.in has 3 of 7
CVE-2022-417417.8 highnginx 1.14.1203.88.158.10mp4 module heap overflow → RCE
CVE-2021-230177.7 highnginx 1.14.1203.88.158.10Resolver 1-byte overwrite → RCE via DNS
CENTOS7-EOLcritCentOS 7 (all packages)203.88.158.10OS unmaintained since 30 Jun 2024; all subsequent CVEs unpatched
UBUNTU2004-EOLhighUbuntu 20.04 LTS14.99.151.149Standard support ended 31 May 2025; unpatched unless Ubuntu Pro/ESM active (openssh itself verified current)
JENKINS-EXPOSEDhighJenkins :808014.99.151.148CI/CD internet-facing, no WAF; version/plugins unverified
MAIL-DMARC-4highDNS5 domainsNo DMARC (cswebsolutions.com also lacks SPF/DKIM entirely)
CVE-2026-28780high*Apache httpd69.167.158.49Heap buffer overflow — *suspected if unpatched
CVE-2022-417427.1 mednginx 1.14.1203.88.158.10mp4 module issue
CVE-2018-16843/446.5 mednginx 1.14.1203.88.158.10Memory exhaustion (HTTP/2, mp4)
CVE-2026-12065.3 medElementor 3.34.3148.113.189.150Sensitive info exposure; fixed in 3.35.8
WP-XMLRPCmedWordPress 7.0.2148.113.189.150xmlrpc.php open (system.multicall) — brute-force amplification
WP-USERENUMmedWordPress REST148.113.189.150/wp-json/wp/v2/users exposes admin “alpinegr” (ID 1)
SPF-BROKENmedDNSconsumersketch.in\010 escapes in SPF; over-broad includes
ENV-403medLaravel apps140.238.249.60.env exists web-root-adjacent (403, not 404); check backup variants, APP_DEBUG
CVE-2025-24530med*phpMyAdmin (cPanel)69.167.158.49XSS <5.2.2 — *suspected
CVE-2024-73474.8 lownginx 1.14.1203.88.158.10mp4 buffer over-read (module-dependent)
LEGACY-2016lowApache + static193.189.75.27Unmaintained since May 2016
WP-CRONlowWordPress148.113.189.150wp-cron.php publicly callable
Re-verification notes (29 July 2026). Every version-based claim in this report was checked against vendor security trackers before publication. Two initial flags were removed after re-checking: (a) CVE-2024-6387 “regreSSHion” — not applicable: Ubuntu’s tracker lists 20.04 (focal) as not-affected; the flaw was introduced in OpenSSH 8.5p1 and this server runs 8.2p1. (b) CVE-2023-38408 — already patched: the fix shipped in package 1:8.2p1-4ubuntu0.8 and the server runs the newer 0.13 build. Lesson recorded: Linux vendors back-port fixes without changing the displayed version, so banners alone can mislead. Also confirmed on this date: no public evidence of leaked passwords or keys for these domains on GitHub or breach aggregators; consumer-sketch.com was intermittently unresponsive during checks (add uptime monitoring).
2 · Server inventory (origin infrastructure)
IPProvider / LocationStack fingerprintOpen portsHosts
203.88.158.10YOU Telecom, INCentOS 7 EOL · nginx 1.14.1 · CWP (cwpsrv) · Varnish80, 443, 2083, 2087~90 csweb.ca clients; development.cswebsolutions.ca; xponentialspace, gujaratshatabdi
14.99.151.148Tata, INnginx (hidden) · Laravel “ChatBot AI” · Jenkins80, 443, 8080, 8443aicb, demoaicb, demoap, demopm, dev, frontaact, stgpm; alignpro*, grantek, bidformycar (csweb.ca)
14.99.151.149Tata, INUbuntu 20.04 (std support ended May 2025) · OpenSSH 8.2p1-4ubuntu0.13 (current) · Pritunl · GitLab22, 80, 443, 8443gitlab.consumer-sketch.com; VPN portal
69.167.158.49Liquid Web, USApache · cPanel/WHM · phpMyAdmin · Roundcube80, 443, 2083, 2087, 2096cswebsolutions.com (wildcard)
20.193.173.92Azure, INNot externally reachable (restricted)api + crm.consumer-sketch.com
140.238.249.60Oracle, USApache · Laravel (AdminLTE) · .env 40380, 443api/new.consumer-sketch.com; admin.anandashram.ngo
140.238.225.37Oracle, USApache · PM dashboard (AOS.js)80, 443status.cswebsolutions.ca
148.113.189.150OVH, CAApache · WordPress 7.0.2 · Elementor 3.34.380, 443alpinegraphics, ameetahluwalia (csweb.ca)
193.189.75.27UKWSD, UKApache · static since May 201680, 443proposal.cswebsolutions.ca
103.228.83.88Trijit, INMail (firewalled from scan); 3 PTR recordsrestrictedmail: consumer-sketch.com, cswebsolutions.ca, cssolutions.us
205.147.101.233SSDCloud, INNot externally reachable (restricted)aicbp.consumer-sketch.com
3 · Domain & email posture
DomainShield (CDN/WAF)Mail hostSPFDKIMDMARC
consumer-sketch.comCloudflareMicrosoft 365yes ~allyesquarantine
consumer-sketch.inCloudflareMicrosoft 365yes -allyesquarantine
consumersketch.inCloudflareZoho + othersbrokenyesreject
consumersketch.com— (parked)
cswebsolutions.comnonenonenonenonenone
cswebsolutions.caCloudflareMicrosoft 365 + Mailjetyes ~allyesquarantine
csweb.caCloudflareGoogleyes ~allyesnone
cssolutions.usCloudflareself-hostedyes ~allnonenone
csdigital.infoCloudflareCloudflare routingyes ~allnone
csdigital.caCloudflareZoho + Mailjet + Googleyes ~allnone
Security Health Report — Consumer Sketch & CS Web Solutions Confidential · 28 July 2026 · Outside-in assessment; internal audit recommended