Build1 publisher3 min readPublished
ZoomEye counts 736,893 internet-facing Mattermost fingerprint matches
ZoomEye's fingerprint index returned 736,893 matches for Mattermost on 23 September 2026, each a service identifying itself as the self-hosted chat server. Teams that self-host to keep chat internal also own the job of checking whether their server is among them.
The Engineer · Build desk

What happened
- A ZoomEye query for app="Mattermost", run with sub_type set to all, returned 736,893 fingerprint matches from the index on 23 September 2026 (UTC).
- Mattermost documents 8065 as its default server port, and a service there without TLS in front carries sessions in protections the operator did not choose.
- Incoming and outgoing webhook URLs work as credentials in URL form and tend to get pasted into documentation, tickets and scripts.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint The count justifies a placement review but cannot size how many servers are vulnerable, since a match confirms neither a deployment nor a flaw.
- decision Remediation for a visible server lands on network placement (TLS, an authenticated access path, a reviewed edge component) and leaves the Mattermost install itself unchanged.
- cost Self-hosting puts the exposure check and the token inventory on the operator's own list, because the operator inherits every consequence of running the server.
- exposure A reachable server puts debugging context and pasted secrets within reach, and deleting a message does not withdraw a credential already typed into a channel.
A ZoomEye fingerprint match means the index saw a service that identifies itself as Mattermost [3]. The write-up that published the count is careful about that unit: "the unit is a match in an index rather than a confirmed deployment or a confirmed weakness" [17]. Whether a given match is reachable past its login page, and whether its operator knows it is visible, are separate questions [3].
For 736,893 to mean 736,893 exposed chat servers, two things would have to hold [1]. Each match would need to be a distinct live deployment, and each would need to answer beyond the login screen. The source establishes neither. It supports a narrower reading: a large number of self-hosted collaboration servers are addressable from outside [18].
The concrete check starts at the default port. Mattermost documents 8065 as its server's default [5]. According to the write-up, a service found on that port with no TLS in front of it carries sessions and messages in protections the operator did not choose [5].
Behind the login sit channels, direct messages and uploaded files [16]. The write-up argues a chat leak is measured in context: who was worried about what, which system they were debugging, and which credential they shared while debugging it [16].
The integration surface holds the credentials. Incoming and outgoing webhook URLs are credentials in URL form, each authenticating a system to a channel, and they get pasted into documentation, tickets and scripts [6]. Bots and personal access tokens act for a user or an integration. Their permissions are usually broader than the task needs, and their inventory is rarely kept up [7]. Single sign-on and plugin configuration are administrative surfaces where a mistake can affect accounts beyond the chat server [8].
Organisations pick Mattermost so their conversations stay on infrastructure they control, and the operator inherits every consequence of running it [4]. A chat server installed because it should stay internal is an odd thing to find in an internet index [19]. The write-up's author says the fix is almost always a placement decision, with no change needed to the application itself [9]. In my view that framing is right. It means TLS in front of the server, an authenticated access path in place of a directly exposed port, and remote access terminated at a component whose exposure has been reviewed [10].
The first step is one search. The operator looks up its own deployment in the fingerprint index and compares the result with the network position it intended [15].
The slower work is the inventory of webhooks, bots and tokens: rotate the ones nobody needs and move the rest into a secret manager [11]. The list also covers multi-factor authentication for administrators and a review of sign-in logs for unexpected locations [12]. Server, plugins and connectors need patching, and the write-up singles out the integration surface as the part that changes most often [13]. Any credential typed into a channel should be treated as disclosed, even after the message is deleted [14].
What to watch
- A ZoomEye breakdown of the matches by port, TLS status or version would show how many sit on 8065 in plain HTTP.
- A rerun of the same app="Mattermost" query later would show whether the count falls as operators recheck placement.
- A Mattermost advisory for a flaw reachable before login would turn this visibility count into a patch-priority list.