<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ioneyrezende</title>
    <description>The latest articles on DEV Community by Ioneyrezende (@ioneyrezende).</description>
    <link>https://dev.to/ioneyrezende</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4195268%2Fa8d26d1c-2193-4da3-8729-fec4cadcf51c.png</url>
      <title>DEV Community: Ioneyrezende</title>
      <link>https://dev.to/ioneyrezende</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ioneyrezende"/>
    <language>en</language>
    <item>
      <title>OAuth mTLS-bound tokens: constraining a stolen token to a certificate</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Wed, 11 Nov 2026 12:01:49 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/oauth-mtls-bound-tokens-constraining-a-stolen-token-to-a-certificate-2a5f</link>
      <guid>https://dev.to/ioneyrezende/oauth-mtls-bound-tokens-constraining-a-stolen-token-to-a-certificate-2a5f</guid>
      <description>&lt;h1&gt;
  
  
  OAuth mTLS-bound tokens: constraining a stolen token to a certificate
&lt;/h1&gt;

&lt;p&gt;OAuth access tokens are often treated as bearer credentials: whoever presents the token gets the access granted to it. That model is easy to integrate, but it makes token theft valuable. A protected resource cannot tell whether the caller is the client that received the token or an attacker who copied it from a log, proxy, or compromised process.&lt;/p&gt;

&lt;p&gt;Mutual TLS client authentication offers a stronger relationship. RFC 8705 defines a mechanism for authenticating an OAuth client with an X.509 certificate and for binding an access token to the certificate used in the TLS connection. The protected resource can then check that the certificate presented by the caller matches the certificate thumbprint recorded in the token. The attacker may hold the token, but without the corresponding private key and a usable certificate path, the token is much less useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The binding is a chain, not a single check
&lt;/h2&gt;

&lt;p&gt;A certificate-bound token includes a confirmation claim, commonly &lt;code&gt;cnf&lt;/code&gt;, with a certificate thumbprint. During a request, the resource server validates the TLS client certificate and compares its thumbprint with the value in the token. The authorization server also needs to know which certificate was used during issuance, or the client must demonstrate possession in a way the authorization server can verify.&lt;/p&gt;

&lt;p&gt;RFC 8705 describes profile rules for using mutual TLS at the token endpoint and for certificate-bound tokens at a protected resource. The important design choice is to keep the certificate identity and the token audience aligned. A token issued for one service or certificate should not be accepted by another service that does not understand the same binding.&lt;/p&gt;

&lt;p&gt;Mutual TLS does not make the token self-authenticating. The resource server still validates the token signature, issuer, audience, expiry, revocation state, and scopes. The certificate check is an additional condition, not a replacement for normal OAuth validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operate the certificate lifecycle
&lt;/h2&gt;

&lt;p&gt;The control depends on certificate issuance, rotation, renewal, and revocation. If a client certificate is shared by every instance of an application, a single compromised host can impersonate the whole deployment. Per-instance identities make rotation and incident containment easier, but they increase the number of certificates to manage.&lt;/p&gt;

&lt;p&gt;Define who can issue a certificate, which trust roots the token service and resource servers accept, and how a certificate is revoked after a suspected compromise. A short-lived certificate reduces the exposure window, but it does not remove the need to revoke an active token or disable a client application when abuse is detected.&lt;/p&gt;

&lt;p&gt;Be explicit about proxy behavior. A TLS-terminating proxy may validate the client certificate and forward a header or assertion to the application, or it may pass the certificate material through. If the application trusts a forwarded header without cryptographic protection, an attacker who can reach the application directly may bypass the client-certificate check. Restrict the listener and authenticate the proxy path as carefully as the client path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handle token storage and reuse correctly
&lt;/h2&gt;

&lt;p&gt;Certificate binding lowers the value of a stolen token, but it does not protect a client that stores the token and the private key together. The private key should be held in a protected keystore or hardware-backed module where the application cannot export it into logs. File permissions alone are not a strong boundary against a compromised application process.&lt;/p&gt;

&lt;p&gt;Refresh tokens need their own review. If refresh tokens are not bound to the client certificate or another sender-constrained mechanism, an attacker may exchange a stolen refresh token for a new access token. RFC 8705 discusses mutual-TLS certificate-bound access and refresh tokens; the authorization server configuration should make the intended behavior explicit.&lt;/p&gt;

&lt;p&gt;Avoid placing access tokens in URLs, browser history, analytics, or support transcripts. Even with certificate binding, a token may reveal scopes and resource identifiers, and a careless request log can expose the certificate thumbprint and token lifetime. Log the client identity and certificate fingerprint where permitted, but redact the token and private-key material.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test negative cases, not only the happy path
&lt;/h2&gt;

&lt;p&gt;The operational test plan should include a valid token with the correct client certificate, a valid token presented with no certificate, a token presented with a different certificate, a certificate that chains to the wrong root, an expired certificate, and a token whose audience no longer matches the resource.&lt;/p&gt;

&lt;p&gt;Test the behavior after certificate rotation. Existing connections can remain open while new connections use a different certificate. The resource server and authorization server must agree on which certificate identity is valid for which token and when an old certificate should stop working.&lt;/p&gt;

&lt;p&gt;Test through every ingress path. Applications behind multiple proxies, service meshes, and load balancers may have different certificate handling. A control that works in one deployment path but silently degrades in another produces inconsistent assurance without an obvious application error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the authorization model narrow
&lt;/h2&gt;

&lt;p&gt;Certificate-bound tokens strengthen client authentication and reduce replay. They do not grant permission by themselves. A compromised client with a valid certificate can still exercise every scope it holds. Keep scopes narrow, separate administrative operations from ordinary reads, and require a fresh authorization decision for high-impact actions.&lt;/p&gt;

&lt;p&gt;Use a short token lifetime and a revocation path that is tested under load. Monitor failed certificate-to-token matches, unexpected certificate issuers, and sudden changes in client certificate thumbprints. A spike in binding failures can indicate a broken rotation or an attempted token replay.&lt;/p&gt;

&lt;p&gt;The strongest deployment combines mutual TLS binding with least privilege, protected private keys, audience checks, and an incident process that can disable both the certificate and the client registration. That combination addresses the realistic failure modes without pretending that one protocol extension solves every stolen-credential problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8705.html" rel="noopener noreferrer"&gt;RFC 8705: OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9700.html" rel="noopener noreferrer"&gt;RFC 9700: Best Current Practice for OAuth 2.0 Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9728.html" rel="noopener noreferrer"&gt;RFC 9728: OAuth 2.0 Protected Resource Metadata&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>oauth</category>
      <category>mtls</category>
      <category>accesstokens</category>
      <category>apisecurity</category>
    </item>
    <item>
      <title>Appsmith permissions: the datasource is where low-code risk accumulates</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Wed, 11 Nov 2026 08:41:10 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/appsmith-permissions-the-datasource-is-where-low-code-risk-accumulates-4e72</link>
      <guid>https://dev.to/ioneyrezende/appsmith-permissions-the-datasource-is-where-low-code-risk-accumulates-4e72</guid>
      <description>&lt;h1&gt;
  
  
  Appsmith permissions: the datasource is where low-code risk accumulates
&lt;/h1&gt;

&lt;p&gt;Appsmith applications combine pages, queries, JavaScript, workflows, and datasources. The visible app may be only a small part of the security surface. A user who can edit a query or publish an app may be able to act through the datasource credentials stored by the platform. That makes datasource management a higher-value permission than a simple application reader role suggests.&lt;/p&gt;

&lt;p&gt;Appsmith documentation describes granular access control for applications, pages, workflows, datasources, environments, and queries. Permissions can be granted for create, read, update, and delete actions, and custom roles can be assigned to users or groups. The platform also encrypts datasource credentials and provides audit logs for events such as datasource changes and role creation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate application authorship from data authority
&lt;/h2&gt;

&lt;p&gt;An app builder may need to change a widget or a query while not needing the production database password. Appsmith's granular model makes that separation possible, but the default role assignment and workspace structure determine whether the separation is used.&lt;/p&gt;

&lt;p&gt;Create distinct roles for app viewers, app editors, datasource administrators, and environment owners. Review which roles can create a new datasource, edit connection settings, and execute a query with production credentials. A user who can create a datasource may be able to point it at an external system and use the app's execution path to retrieve data.&lt;/p&gt;

&lt;p&gt;Use separate environments for development, staging, and production where the deployment supports them. A staging datasource should not contain a production secret with broader rights than the application needs. Test a publish flow to confirm that production credentials are not copied into a development workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Encrypted credentials still need custody
&lt;/h2&gt;

&lt;p&gt;Appsmith encrypts datasource credentials at rest, but encryption does not prevent an authorized user from using the datasource through the application. The relevant questions are who can configure the connection, who can change the query, who can publish a change, and who can read the audit log.&lt;/p&gt;

&lt;p&gt;Protect the instance encryption secret and backup material outside the normal application data path. A backup that contains the database, configuration, and secret together should be handled as a high-value package. Restrict restore access and test recovery without exposing credentials in a shared folder.&lt;/p&gt;

&lt;p&gt;Rotate database and API credentials on a schedule and after any suspected leak. Verify that the application uses a least-privilege account. A database user with read-only access to a reporting schema is very different from a user with administrative rights across the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use audit evidence during investigations
&lt;/h2&gt;

&lt;p&gt;Appsmith audit logs record queries, datasource changes, user invitations, role changes, and other admin events. Export or forward the logs to a system with retention that matches the organization's incident policy. A local log that can be edited by the same administrator who changed the datasource weakens the evidence chain.&lt;/p&gt;

&lt;p&gt;When investigating a suspicious app, preserve the app version, query definitions, datasource identifiers, and relevant audit events before remediation. Determine whether the query was changed, the datasource credentials were rotated, or the app was published to a different audience.&lt;/p&gt;

&lt;p&gt;Review the deployment's backup process as well. Appsmith's disaster-recovery guidance describes backing up the database, the complete persistent filesystem, and the matching credential material. A restore test that only receives the application files but not the keys may fail precisely when it is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement
&lt;/h2&gt;

&lt;p&gt;ZoomEye can locate systems that identify as Appsmith through an application fingerprint. The query is useful for finding an owned deployment or an unsanctioned shadow instance. It does not show whether a particular datasource is connected to production data.&lt;/p&gt;

&lt;p&gt;On 2026-11-11, a count-only query with &lt;code&gt;dork&lt;/code&gt; &lt;code&gt;app="Appsmith"&lt;/code&gt;, &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and page size 1 returned 7,829 matching assets. The deterministic search link is &lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJBcHBzbWl0aCI%3D" rel="noopener noreferrer"&gt;the Appsmith ZoomEye query&lt;/a&gt;. The result counts matching product assets, not exposed credentials or confirmed vulnerable apps.&lt;/p&gt;

&lt;p&gt;Combine the measurement with DNS, cloud inventory, and certificate ownership. Validate the instance's owner before making a request. If a shadow deployment is found, review its workspace roles, datasource list, public sharing settings, and audit export.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical access review
&lt;/h2&gt;

&lt;p&gt;Start with users who can create or edit datasources. Compare those permissions with the production data owners and remove standing access that is no longer required. Review custom roles for broad &lt;code&gt;manage&lt;/code&gt; permissions and confirm that a role name reflects its actual capabilities.&lt;/p&gt;

&lt;p&gt;Inspect production datasource accounts and their grants. Identify any account that can write beyond the application's intended tables, create users, or change schemas. Replace shared credentials with dedicated accounts and test the app after rotation.&lt;/p&gt;

&lt;p&gt;Review public and embedded access. A published app may expose a workflow without requiring an Appsmith login, or it may rely on a third-party embedding context. Verify the intended audience and the actions available to an unauthenticated visitor.&lt;/p&gt;

&lt;p&gt;Finally, export audit evidence and confirm that the platform can reconstruct a datasource change from the event record. Low-code tools compress the distance between configuration and execution. Permission design and auditability have to compensate for that compression.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.appsmith.com/advanced-concepts/granular-access-control" rel="noopener noreferrer"&gt;Appsmith: Granular Access Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.appsmith.com/connect-data/overview" rel="noopener noreferrer"&gt;Appsmith: Connect data overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.appsmith.com/advanced-concepts/audit-logs" rel="noopener noreferrer"&gt;Appsmith: Audit logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJBcHBzbWl0aCI%3D" rel="noopener noreferrer"&gt;ZoomEye: app="Appsmith"&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>appsmith</category>
      <category>lowcode</category>
      <category>datasource</category>
      <category>zoomeye</category>
    </item>
    <item>
      <title>POSIX ACLs Are Only as Clear as the Mask</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Wed, 11 Nov 2026 05:20:45 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/posix-acls-are-only-as-clear-as-the-mask-3efl</link>
      <guid>https://dev.to/ioneyrezende/posix-acls-are-only-as-clear-as-the-mask-3efl</guid>
      <description>&lt;h1&gt;
  
  
  POSIX ACLs Are Only as Clear as the Mask
&lt;/h1&gt;

&lt;p&gt;Traditional Unix permissions answer a simple question: what can the owner, group, and everyone else do? POSIX access control lists add named users and groups, plus a mask that limits effective permissions. The extra flexibility is useful when a service account needs access to one directory without joining a broad group. It also creates another layer that can contradict the mode bits shown by &lt;code&gt;ls&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;acl(5)&lt;/code&gt; manual describes two ACL types. An access ACL controls permissions on an object. A default ACL on a directory determines the ACL inherited by newly created files and subdirectories. The access check algorithm considers the file mode bits, the access ACL, the process's effective user and group identities, and the ACL mask.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mask is not decoration
&lt;/h2&gt;

&lt;p&gt;Every named user and named group entry is limited by the ACL mask. The owning group entry also corresponds to the file's group permission bits. A named user may appear to have &lt;code&gt;rwx&lt;/code&gt;, but if the mask grants only &lt;code&gt;r-x&lt;/code&gt;, the effective permission is &lt;code&gt;r-x&lt;/code&gt;. The &lt;code&gt;getfacl&lt;/code&gt; output can show an &lt;code&gt;effective:&lt;/code&gt; comment so an operator can see the difference between the stored entry and the permission that is actually applied.&lt;/p&gt;

&lt;p&gt;This matters during incident response. A reviewer may see a named user entry and conclude that the account can write a file. The mask may reduce that authority. Conversely, a routine &lt;code&gt;chmod&lt;/code&gt; that changes the group bits can change the mask and silently widen named-user permissions. The safer workflow is to inspect the ACL before and after a mode change, not compare only the symbolic mode string.&lt;/p&gt;

&lt;h2&gt;
  
  
  Default ACLs change creation behavior
&lt;/h2&gt;

&lt;p&gt;A directory with a default ACL supplies ACL entries to new files and subdirectories. The inheritance rules are not identical to &lt;code&gt;umask&lt;/code&gt;. The manual notes that when a default ACL applies, the umask is ignored and the default ACL determines the inherited permissions. This can surprise an application that assumes &lt;code&gt;umask 077&lt;/code&gt; will always produce private files.&lt;/p&gt;

&lt;p&gt;Before deploying a service with a shared data directory, create test files and inspect their resulting ACLs. Check files created by the service account, by an archive extraction process, and by an administrative tool. A process with a permissive default ACL can create a file that is readable by a group the application did not intend to expose.&lt;/p&gt;

&lt;p&gt;Default ACLs can be copied by tools that preserve permissions. Backups, restore jobs, and deployment scripts should preserve the ACL intentionally rather than silently dropping it. The &lt;code&gt;getfacl&lt;/code&gt; and &lt;code&gt;setfacl&lt;/code&gt; manual pages include recursive backup and restore workflows; those workflows need their own review because a restore can reintroduce a stale named-user grant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit the effective path
&lt;/h2&gt;

&lt;p&gt;A practical ACL review examines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the owning user and group;&lt;/li&gt;
&lt;li&gt;the mode bits and access ACL;&lt;/li&gt;
&lt;li&gt;the mask;&lt;/li&gt;
&lt;li&gt;named users and groups;&lt;/li&gt;
&lt;li&gt;default ACLs on parent directories;&lt;/li&gt;
&lt;li&gt;the service's effective identity and supplementary groups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use &lt;code&gt;getfacl&lt;/code&gt; on the actual path and compare it with &lt;code&gt;namei -l&lt;/code&gt; or an equivalent path walk. A file may have a safe ACL while a parent directory grants traversal to a broader group. The check should also include the mount options and any overlay or container layer that changes the view of the filesystem.&lt;/p&gt;

&lt;p&gt;Test access as the service identity with &lt;code&gt;sudo -u&lt;/code&gt; or the platform's equivalent. Do not test only as root, because root may bypass checks that apply to the service. Confirm both a permitted operation and a denied operation, and record the effective ACL at the time of the test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid accidental normalization
&lt;/h2&gt;

&lt;p&gt;Some deployment tools rewrite permissions on every run. A configuration management task that calls &lt;code&gt;chmod&lt;/code&gt; can recalculate the ACL mask; an archive extraction can replace a file and inherit a different default ACL. Treat ACL changes as security-relevant configuration, not cosmetic cleanup.&lt;/p&gt;

&lt;p&gt;Keep a small set of tested ACL recipes and apply them through the same path in every environment. When an emergency exception is added, include an owner and an expiration date. Then verify that removing the named entry does not leave a stale mask that continues to grant access through the owning group.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;POSIX ACLs are a useful tool for precise file access, but their effective permissions are the result of entries, mask, mode bits, inheritance, and process identity. Review the whole path. A grant that looks narrow in one line of &lt;code&gt;getfacl&lt;/code&gt; may be wider than intended when the mask and parent defaults are included.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.man7.org/linux/man-pages/man5/acl.5.html" rel="noopener noreferrer"&gt;acl(5), Linux manual page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.man7.org/linux/man-pages/man1/getfacl.1.html" rel="noopener noreferrer"&gt;getfacl(1), Linux manual page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.man7.org/linux/man-pages/man1/setfacl.1.html" rel="noopener noreferrer"&gt;setfacl(1), Linux manual page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>posixacl</category>
      <category>linux</category>
      <category>filepermissions</category>
      <category>accesscontrol</category>
    </item>
    <item>
      <title>Request Tracker API Tokens Inherit the User's Rights</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Wed, 11 Nov 2026 02:01:19 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/request-tracker-api-tokens-inherit-the-users-rights-2onm</link>
      <guid>https://dev.to/ioneyrezende/request-tracker-api-tokens-inherit-the-users-rights-2onm</guid>
      <description>&lt;h1&gt;
  
  
  Request Tracker API Tokens Inherit the User's Rights
&lt;/h1&gt;

&lt;p&gt;Request Tracker's REST2 API is attractive because it maps cleanly to the ticket and queue model. A token is not a separate superuser interface. It authenticates as an RT user, and that user's rights determine what the API can read or change. The right review therefore starts with the token owner and the queue rights, not with the API URL.&lt;/p&gt;

&lt;p&gt;On 2026-11-11 at 08:46:48 +08:00, the ZoomEye count-only query &lt;code&gt;app="Request Tracker"&lt;/code&gt; returned 136 matches with page 1, page size 1, and &lt;code&gt;sub_type=all&lt;/code&gt;. A separate &lt;code&gt;title="Request Tracker"&lt;/code&gt; query returned 126 matches at 08:46:50 +08:00. The links are the &lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJSZXF1ZXN0IFRyYWNrZXIi" rel="noopener noreferrer"&gt;application query&lt;/a&gt; and the &lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IlJlcXVlc3QgVHJhY2tlciI%3D" rel="noopener noreferrer"&gt;title query&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The two counts are close but not interchangeable. They may overlap, and both are still counts of matching pages, not confirmed RT installations. Neither count establishes that an API route is reachable from the internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tokens need rights, not just rotation
&lt;/h2&gt;

&lt;p&gt;RT's authentication documentation says API tokens are typically used to access REST2. The account should receive the rights needed for its intended operations. The REST2 documentation describes responses that reflect the user's rights; a queue operation that the token owner cannot perform is not authorized merely because the endpoint exists.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;token owner and purpose;&lt;/li&gt;
&lt;li&gt;queue-level versus global rights;&lt;/li&gt;
&lt;li&gt;read, create, modify, and delete operations;&lt;/li&gt;
&lt;li&gt;rights to inspect or change ACLs;&lt;/li&gt;
&lt;li&gt;requestor and self-service access;&lt;/li&gt;
&lt;li&gt;expiration and revocation procedure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A token owned by an administrator is not a normal automation credential. It can inherit broad rights and turn a reporting script into a ticket-management authority. Create dedicated service users with narrow queue rights, then test a denied operation from the same token.&lt;/p&gt;

&lt;h2&gt;
  
  
  Protect the data path
&lt;/h2&gt;

&lt;p&gt;Ticket data can include credentials, personal information, attachments, and internal comments. The API's output rules may hide links or actions that the user cannot perform, but that is not the same as removing sensitive fields from an allowed response. Review which fields the integration stores and forwards.&lt;/p&gt;

&lt;p&gt;Use TLS and verify certificates. Do not place tokens in URLs or shell history. If a token is stored in a configuration file, restrict the file and document the read path. If it is stored in a secret manager, test the failure mode when retrieval fails; the automation should stop rather than fall back to an old token.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test queue boundaries
&lt;/h2&gt;

&lt;p&gt;A useful test has three identities: a self-service requestor, a queue technician, and an administrator. For each, attempt to read a ticket outside the queue and update a status that the role should not control. Confirm the resulting behavior in the API and in the RT audit trail.&lt;/p&gt;

&lt;p&gt;Then review the administrative endpoints that grant or revoke rights. A token that can modify queue ACLs should be treated as a control-plane credential, not a routine integration token. Rotate it separately and alert on its use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the search result as an inventory clue
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;app&lt;/code&gt; and &lt;code&gt;title&lt;/code&gt; queries can help find public RT pages. The &lt;code&gt;app&lt;/code&gt; query may reflect a product fingerprint, while the title can be customized. The count alone cannot tell whether the page is a helpdesk portal, an agent login, or a marketing site.&lt;/p&gt;

&lt;p&gt;Confirm the deployment, then focus on the rights model. Request Tracker's value is its fine-grained workflow. The security risk is a token or group that carries more of that workflow than the integration needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.requesttracker.com/rt/latest/authentication.html" rel="noopener noreferrer"&gt;Request Tracker authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.requesttracker.com/rt/latest/RT/REST2.html" rel="noopener noreferrer"&gt;RT::REST2 documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rt-wiki.bestpractical.com/wiki/Rights" rel="noopener noreferrer"&gt;Request Tracker rights documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=YXBwPSJSZXF1ZXN0IFRyYWNrZXIi" rel="noopener noreferrer"&gt;ZoomEye Request Tracker application query&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IlJlcXVlc3QgVHJhY2tlciI%3D" rel="noopener noreferrer"&gt;ZoomEye Request Tracker title query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>requesttracker</category>
      <category>rest2</category>
      <category>accesscontrol</category>
    </item>
    <item>
      <title>Centreon API tokens inherit the union of access groups</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 22:44:17 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/centreon-api-tokens-inherit-the-union-of-access-groups-1578</link>
      <guid>https://dev.to/ioneyrezende/centreon-api-tokens-inherit-the-union-of-access-groups-1578</guid>
      <description>&lt;h1&gt;
  
  
  Centreon API tokens inherit the union of access groups
&lt;/h1&gt;

&lt;p&gt;Centreon provides monitoring, configuration, and API access through several interfaces. Its authentication-token documentation describes API tokens, CMA tokens, and poller tokens as different credential types. Treating them as one class of secret hides the most important difference: an API token is linked to a Centreon user, while a poller or agent token is part of a machine-registration path.&lt;/p&gt;

&lt;p&gt;Centreon users can belong to several access groups, and the rights defined in those groups are combined. A token's effective authority therefore depends on the user record, the access groups, the resource filters, and the action permissions. A review that lists token names without that union cannot answer what the token can change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement and scope
&lt;/h2&gt;

&lt;p&gt;On 2026-11-10 at 21:53 UTC, count-only ZoomEye probes used page 1, page size 1, and &lt;code&gt;sub_type=all&lt;/code&gt;. &lt;code&gt;app="Centreon"&lt;/code&gt; returned 0 assets. The title query &lt;code&gt;title="Centreon"&lt;/code&gt; returned 3,545. The zero app result is not evidence that no Centreon deployment exists. It shows that this product-specific field did not match in this measurement. The title result is an inventory lead, not confirmation of product version or authorization state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inventory token type and owner
&lt;/h2&gt;

&lt;p&gt;Export API tokens with the linked user, creation date, expiry, last use, and the integration that calls the API. Keep CMA and poller tokens in a separate register with the agent or poller they belong to. A machine token that is valid for registration should not be able to act as a monitoring administrator.&lt;/p&gt;

&lt;p&gt;Calculate effective access for each user. Record access-group memberships, resource ACLs, menu permissions, and action ACLs. Test a read-only monitoring request and a configuration change that should be denied. The user's login role does not replace this test because the ACL groups can combine.&lt;/p&gt;

&lt;p&gt;Review the people who can create tokens for other users. Centreon documentation describes administrators and users with the relevant token-management permission as able to create tokens more broadly. That is a privileged capability. Require a named approver and record the token owner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Protect the token and the API path
&lt;/h2&gt;

&lt;p&gt;Store API tokens in a secret manager and send them only over a protected management path. Do not include them in monitoring dashboards or browser-side code. Check whether the API is reachable from a user network when it should be limited to the automation subnet. TLS protects the token in transit; it does not hide an overprivileged token after it is used.&lt;/p&gt;

&lt;p&gt;Rotate poller and CMA credentials through a planned maintenance process. A failed poller registration can affect monitoring visibility, while a stale poller token can preserve an old path. Test replacement and revocation with a spare agent before changing the production fleet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the count honestly
&lt;/h2&gt;

&lt;p&gt;The zero app result and positive title result are a useful example of fingerprint uncertainty. Do not convert either into a claim about exposed Centreon systems. Reconcile the title leads against your own asset inventory, then review the tokens and ACLs inside each confirmed deployment.&lt;/p&gt;

&lt;p&gt;The security decision is whether an API credential is a machine-only integration or a user-level union. Centreon's access model makes that distinction visible when the team records the user, groups, resource filters, and actions behind every token.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.centreon.com/docs/api/authentication-tokens/" rel="noopener noreferrer"&gt;Centreon authentication tokens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.centreon.com/docs/24.10/administration/access-control-lists/" rel="noopener noreferrer"&gt;Centreon access control lists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.centreon.com/docs/25.10/api/rest-api-v1/" rel="noopener noreferrer"&gt;Centreon REST API v1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>centreon</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>A visible Longhorn UI is a Kubernetes storage control plane</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 19:23:03 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/a-visible-longhorn-ui-is-a-kubernetes-storage-control-plane-1kii</link>
      <guid>https://dev.to/ioneyrezende/a-visible-longhorn-ui-is-a-kubernetes-storage-control-plane-1kii</guid>
      <description>&lt;h1&gt;
  
  
  A visible Longhorn UI is a Kubernetes storage control plane
&lt;/h1&gt;

&lt;p&gt;Longhorn gives Kubernetes clusters replicated block storage. Its UI is a convenient view of volumes, replicas, nodes, backups, and storage health. It is not just a dashboard. The &lt;a href="https://longhorn.io/docs/1.13.0/concepts/" rel="noopener noreferrer"&gt;Longhorn concepts documentation&lt;/a&gt; says the Longhorn UI interacts with Longhorn Manager through the Longhorn API, and the manager handles volume creation and management in the cluster.&lt;/p&gt;

&lt;p&gt;That makes the UI a control plane for storage. Access can affect availability, backup exposure, and the data path for workloads. The &lt;a href="https://longhorn.io/docs/1.13.0/deploy/install/install-with-kubectl/" rel="noopener noreferrer"&gt;Longhorn installation guide&lt;/a&gt; is explicit: authentication to the Longhorn UI is not enabled by default. A deployment that exposes the UI without an authentication proxy has placed a management interface on the network and relied on the surrounding platform to protect it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication can come from several layers
&lt;/h2&gt;

&lt;p&gt;When Longhorn is installed through Rancher, the &lt;a href="https://longhorn.io/docs/1.13.0/deploy/install/install-with-rancher/" rel="noopener noreferrer"&gt;Rancher installation documentation&lt;/a&gt; notes that Rancher can provide authentication to the Longhorn UI. A kubectl or Helm installation needs a separate ingress authentication layer. The &lt;a href="https://longhorn.io/docs/1.13.0/deploy/accessing-the-ui/longhorn-ingress/" rel="noopener noreferrer"&gt;Longhorn ingress documentation&lt;/a&gt; shows basic authentication as one option. The HTTPRoute guide points to an authentication proxy or middleware for external traffic.&lt;/p&gt;

&lt;p&gt;These are different trust models. Rancher may map a cluster identity into the UI. Basic authentication may protect the ingress but share one credential across operators. An external identity-aware proxy may provide group mapping but depend on header trust. Record which model is in use, who owns the credential, and how the user is removed when they leave the team.&lt;/p&gt;

&lt;p&gt;Network controls should reinforce authentication. The Longhorn UI and manager endpoints should be reachable from a management network or through an authenticated ingress, not from an arbitrary workload network. The &lt;a href="https://longhorn.io/docs/1.13.0/advanced-resources/security/network-policy/" rel="noopener noreferrer"&gt;network policy documentation&lt;/a&gt; notes that some policy behavior has limits around node-local traffic and webhook reachability. Do not assume a network policy alone creates a complete management boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement and limitation
&lt;/h2&gt;

&lt;p&gt;Count-only ZoomEye probes on 2026-11-10 at 18:44 to 18:45 UTC used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and pagesize 1. &lt;code&gt;app="Longhorn"&lt;/code&gt; returned 0; &lt;code&gt;title="Longhorn"&lt;/code&gt; returned 576. The title may include unrelated uses of the word, so it is not a precise product identity. The selected &lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9Ikxvbmdob3JuIg%3D%3D" rel="noopener noreferrer"&gt;ZoomEye search&lt;/a&gt; is a candidate-discovery query, not a confirmation that the UI is unauthenticated.&lt;/p&gt;

&lt;p&gt;The matching asset also does not reveal whether Longhorn is installed through Rancher, which ingress protects it, or whether the reachable port is the UI rather than a related service. Use the result to identify owners and then verify the actual URL and authentication layer with an approved request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review storage authority
&lt;/h2&gt;

&lt;p&gt;List the users and groups that can open the UI, the identity provider or local credential in use, and the Kubernetes permissions behind any service account login. Review who can create or expand a volume, delete a replica, change a backup target, and restore a snapshot. A storage administrator is a privileged role even if the person does not have general cluster administrator access.&lt;/p&gt;

&lt;p&gt;Check that the UI is not reachable through a broad public ingress, an old load balancer, or a development hostname. Review backup target credentials separately from UI credentials. A backup target can contain copies of persistent data, so the identity that can change it or delete snapshots has a direct availability impact.&lt;/p&gt;

&lt;p&gt;Test an unauthenticated request, a valid user in the wrong group, and a request through the NodePort or internal service path. The last path is often overlooked when the public ingress is configured correctly. Check the Longhorn frontend service, the manager endpoints, and any webhook addresses that the Kubernetes API server must reach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operational checklist
&lt;/h2&gt;

&lt;p&gt;Record the external URL, authentication mode, TLS certificate owner, and network allowlist. Enable audit logging at the ingress or identity proxy, and correlate UI actions with Kubernetes audit events and backup activity. Review dormant accounts and shared credentials. Provide a documented break-glass path that does not depend on the same identity proxy being healthy.&lt;/p&gt;

&lt;p&gt;A visible Longhorn UI should be treated as a storage management interface, not as an informational metrics page. The deployment is in good shape when every path to it is authenticated, attributable, and limited to the people who can safely change persistent storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://longhorn.io/docs/1.13.0/concepts/" rel="noopener noreferrer"&gt;Longhorn concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://longhorn.io/docs/1.13.0/deploy/accessing-the-ui/longhorn-ingress/" rel="noopener noreferrer"&gt;Longhorn UI authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://longhorn.io/docs/1.13.0/advanced-resources/security/network-policy/" rel="noopener noreferrer"&gt;Longhorn network policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>kubernetes</category>
      <category>storage</category>
    </item>
    <item>
      <title>A Post-Patch Validation Checklist for CVE-2026-79872</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 16:00:24 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/a-post-patch-validation-checklist-for-cve-2026-79872-3ndj</link>
      <guid>https://dev.to/ioneyrezende/a-post-patch-validation-checklist-for-cve-2026-79872-3ndj</guid>
      <description>&lt;h1&gt;
  
  
  A Post-Patch Validation Checklist for CVE-2026-79872
&lt;/h1&gt;

&lt;p&gt;An ArubaOS upgrade is complete only when the affected system runs the expected fixed image and its security controls still work. For CVE-2026-79872, that requires validation at the device level, not just a closed change ticket or a successful file upload.&lt;/p&gt;

&lt;p&gt;The vulnerability is a network-reachable buffer overflow in the underlying operating system of AOS. It requires no authentication or user interaction and can lead to privileged code execution. HPE rates it 9.4 under CVSS 3.1 with vector &lt;code&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  First confirm applicability
&lt;/h2&gt;

&lt;p&gt;Before checking a patch, confirm the device is in scope. Affected releases include AOS-10.8.x through 10.8.1.1, AOS-10.7.x through 10.7.2.6, AOS-10.4.x through 10.4.1.13, AOS-8.13.x through 8.13.3.0, and AOS-8.10.x through 8.10.0.23.&lt;/p&gt;

&lt;p&gt;The fixed minimums are 10.8.1.2, 10.7.2.7, 10.4.1.14, 8.13.3.1, and 8.10.0.24. A device outside the listed product roles still needs an advisory check if its ownership or software lineage is uncertain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Device-level image verification
&lt;/h2&gt;

&lt;p&gt;For each controller, gateway, conductor, or access point, record the active image returned by the device after upgrade. Compare the branch and build with the approved target. A successful upload, pre-stage, or peer reboot does not prove that the active partition changed.&lt;/p&gt;

&lt;p&gt;Check every member of a redundant pair or cluster. Confirm that standby systems do not run an old image. For access points, verify the actual image reported by the managed device rather than assuming the controller update propagated successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Management-path validation
&lt;/h2&gt;

&lt;p&gt;HPE's interim workaround is to restrict CLI and web management interfaces to a dedicated Layer 2 segment or VLAN and control Layer 3 and higher access with firewall policy. After patching, test that these controls still enforce the intended source networks.&lt;/p&gt;

&lt;p&gt;Use an external or lower-trust test position to check that unauthorized management paths are blocked. Record both successful administrative access and denied access. Ensure IPv4, IPv6, direct links, remote-access paths, and management tunnels are represented where they exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logging and accounting
&lt;/h2&gt;

&lt;p&gt;Accounting controls should track and log administrative activity and resource use. Confirm that the records survive a restart and reach the central collection point. Review the exposure window for unexpected account creation, policy changes, disabled logging, configuration edits, and authentication anomalies.&lt;/p&gt;

&lt;p&gt;These checks do not prove that exploitation occurred or did not occur. The advisory does not identify the trigger interface or provide a packet signature. Preserve the distinction between a control failure, an operational change, and a suspected compromise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exposure and inventory reconciliation
&lt;/h2&gt;

&lt;p&gt;A ZoomEye Search for &lt;code&gt;app="ArubaOS"&lt;/code&gt; returned 212 product matches and the Filter &lt;code&gt;vul.cve="CVE-2026-79872"&lt;/code&gt; returned 0. This is product-fingerprint evidence, not a list of vulnerable devices. After patching, reconcile owned devices against the internal inventory and investigate any external ArubaOS observation that has no known owner.&lt;/p&gt;

&lt;p&gt;Do not mark an internet observation fixed because a CMDB record says patched. The closure evidence must come from the device and match the asset identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final closure record
&lt;/h2&gt;

&lt;p&gt;A defensible record includes the device ID, role, pre-patch branch and build, target release, observed post-patch build, reboot or failover result, management-interface test, logging check, owner, and timestamp. Add exceptions for end-of-maintenance or end-of-support equipment and state the accepted risk.&lt;/p&gt;

&lt;p&gt;HPE was not aware of public exploit code at advisory release. The lack of a public exploit does not replace verification. The final test is whether every affected device can prove it is running a fixed image and has the intended management controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://csaf.arubanetworking.hpe.com/2026/hpe_networking_-_hpesbnw05162.txt" rel="noopener noreferrer"&gt;HPE Networking advisory HPESBNW05162&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cve.org/CVERecord?id=CVE-2026-79872" rel="noopener noreferrer"&gt;CVE-2026-79872 record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cert.cyber.gouv.fr/avis/CERTFR-2026-AVI-1369/" rel="noopener noreferrer"&gt;CERT-FR advisory CERTFR-2026-AVI-1369&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.incibe.es/incibe-cert/alerta-temprana/avisos/multiples-vulnerabilidades-en-productos-de-hpe-4" rel="noopener noreferrer"&gt;INCIBE advisory on multiple HPE product vulnerabilities&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>arubaos</category>
      <category>validation</category>
    </item>
    <item>
      <title>BTCPay Server's exposed LND macaroon was a wallet-control failure</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 12:45:24 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/btcpay-servers-exposed-lnd-macaroon-was-a-wallet-control-failure-5cbp</link>
      <guid>https://dev.to/ioneyrezende/btcpay-servers-exposed-lnd-macaroon-was-a-wallet-control-failure-5cbp</guid>
      <description>&lt;h1&gt;
  
  
  BTCPay Server's exposed LND macaroon was a wallet-control failure
&lt;/h1&gt;

&lt;p&gt;An exposed admin page is normally an authentication problem. In BTCPay Server before 2.4.2, the exposed object was a credential file for the Lightning Network Daemon. The difference matters because an LND admin macaroon is not a read-only API key. It can authorize wallet operations, including movement of funds.&lt;/p&gt;

&lt;p&gt;BTCPay Server published an urgent advisory after external access to &lt;code&gt;.macaroon&lt;/code&gt; credentials was identified. CVE-2026-119757 describes an unauthenticated file-disclosure flaw affecting versions before 2.4.2, including release candidates. The CVE record assigns CVSS v3.1 9.8 and CVSS v4.0 9.3. The vendor says the stolen-funds risk applies specifically to deployments that use LND.&lt;/p&gt;

&lt;p&gt;The official Docker deployment generated an Nginx route that exposed the &lt;code&gt;lnd_bitcoin&lt;/code&gt; container. The advisory and later hardening notes explain that LND provides unauthenticated &lt;code&gt;WalletUnlocker&lt;/code&gt; and &lt;code&gt;State&lt;/code&gt; interfaces while a wallet is locked. An external party could reach more than a static file endpoint. The misconfiguration turned the reverse proxy into the trust boundary controlling who could read the node's credential material.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the macaroon is the asset
&lt;/h2&gt;

&lt;p&gt;LND macaroons carry permissions. An admin macaroon can perform the broadest wallet actions, including creating invoices, managing channels, and moving funds. The exact damage depends on the node, its channels, its on-chain balance, and the permissions encoded in the credential. That uncertainty is why an unauthenticated read must be handled as a potential wallet compromise rather than a routine information leak.&lt;/p&gt;

&lt;p&gt;The patched application is only one part of the response. A server can be upgraded while an attacker already possesses the old credential. The credential must be treated as live until the node's macaroon is regenerated or revoked and the old material is no longer accepted. BTCPay's advisory and follow-up hardening posts document the patching and credential-reset work required for affected operators.&lt;/p&gt;

&lt;p&gt;The incident also shows why reverse-proxy templates deserve security review. A container can listen on a private service port and still become internet-facing if a generated route forwards it. Nginx configuration generated by a deployment tool is production configuration. It needs the same allowlist, authentication, and route tests as an application controller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Immediate response for an affected operator
&lt;/h2&gt;

&lt;p&gt;Take the BTCPay Server offline if the instance is old and the upstream LND endpoint is reachable from the internet. Upgrade to at least 2.4.2, then apply the current hardening release appropriate to the deployment. Confirm the proxy no longer exposes LND's REST or gRPC ports and that unauthenticated wallet setup or unlock routes are blocked.&lt;/p&gt;

&lt;p&gt;Regenerate the LND admin macaroon according to the project's current procedure. Do not assume that restarting the container invalidates the old value. Check all derived credentials, backup files, automation, and external wallet connections that may have used the exposed macaroon. If the wallet password or seed material was also available to the attacker, the response may require moving funds and rebuilding the node.&lt;/p&gt;

&lt;p&gt;Review LND and on-chain activity across the exposure window. Look for unauthorized invoices, channel opens or closes, address generation, payment attempts, and wallet-unlock events. BTCPay invoice logs are useful, but they are not a complete record of direct LND actions. Compare node and wallet evidence before concluding that no funds moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detection and prevention
&lt;/h2&gt;

&lt;p&gt;The strongest preventive control is to keep the LND API on a private listener and require an authenticated proxy for every administrative route. Deny access to the LND container from the internet by default. Add configuration tests that assert the public Nginx template contains no route to wallet-unlock, state, or macaroon paths.&lt;/p&gt;

&lt;p&gt;Treat a macaroon file as a secret with an owner, an issuance record, and a revocation procedure. Separate payment-processing credentials from node-administration credentials wherever the deployment allows it. Rotate credentials when a reverse-proxy rule changes, not only when the application version changes.&lt;/p&gt;

&lt;p&gt;This is a useful case for security teams because it replaces a vague warning about exposed services with a concrete chain: public proxy route, LND endpoint, macaroon file, wallet authority. The chain is short. The defensive decision should be equally direct.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.btcpayserver.org/security-advisory-btcpay-server-2-4-2/" rel="noopener noreferrer"&gt;BTCPay Server security advisory for 2.4.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.btcpayserver.org/btcpay-server-security-incident-response-and-next-steps/" rel="noopener noreferrer"&gt;BTCPay Server incident response update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.btcpayserver.org/btcpay-server-2-4-4/" rel="noopener noreferrer"&gt;BTCPay Server 2.4.4 security update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.btcpayserver.org/Docker/networking/" rel="noopener noreferrer"&gt;BTCPay Docker networking documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>payments</category>
      <category>wallets</category>
      <category>incidentresponse</category>
    </item>
    <item>
      <title>BTCPay Server: 937 title matches and the wallet authority behind the page</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 09:23:21 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/btcpay-server-937-title-matches-and-the-wallet-authority-behind-the-page-113j</link>
      <guid>https://dev.to/ioneyrezende/btcpay-server-937-title-matches-and-the-wallet-authority-behind-the-page-113j</guid>
      <description>&lt;h1&gt;
  
  
  BTCPay Server: 937 title matches and the wallet authority behind the page
&lt;/h1&gt;

&lt;p&gt;BTCPay Server is a self-hosted payment processor that can connect to a Bitcoin node and an LND Lightning node. A public instance may hold store settings, payment history, API keys, and wallet or node credentials. The page title identifies the application. It does not identify whether the node is reachable, which Lightning backend is used, or whether the deployment is patched.&lt;/p&gt;

&lt;p&gt;ZoomEye count-only measurements on 2026-11-09 between 23:46 and 23:47 UTC returned 937 assets for &lt;code&gt;title="BTCPay Server"&lt;/code&gt;, 4,493 for the product name in the HTTP body, and zero for &lt;code&gt;app="BTCPay Server"&lt;/code&gt;. The query used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and page size 1. The counts are matched records, not counts of vulnerable servers or wallets.&lt;/p&gt;

&lt;p&gt;The absence of an application fingerprint is a useful limitation. BTCPay can be deployed behind a reverse proxy, Tor, or a custom portal. A title match may be a legitimate storefront or an administrative page. The body matches are broader and need validation. The available evidence supports a discovery lead, not a conclusion about version or node access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the money-control boundary sits
&lt;/h2&gt;

&lt;p&gt;BTCPay's own security advisory for CVE-2026-119757 explains that a pre-2.4.2 route could expose LND macaroon files. LND uses macaroons as capability credentials. An admin macaroon can authorize wallet operations, which makes the file disclosure a wallet-control problem, not a routine configuration leak.&lt;/p&gt;

&lt;p&gt;The official Docker networking documentation says Nginx blocks LND's unauthenticated wallet creation, unlock, password-change, and state methods. That is the correct design pattern, but it also shows that the reverse proxy is part of the security boundary. A public BTCPay title does not tell you whether the generated proxy template is current or whether LND is exposed on another port.&lt;/p&gt;

&lt;p&gt;The operator's review should therefore separate three layers: the BTCPay web application, the reverse proxy, and the Lightning node. Confirm the BTCPay version, inspect the active Nginx template, check whether the LND REST or gRPC listener is published, and verify that unauthenticated wallet routes return a failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement method
&lt;/h2&gt;

&lt;p&gt;The SDK requested one result per dork with &lt;code&gt;sub_type="all"&lt;/code&gt;, page 1, and page size 1. It read the exact total and did not download or print asset records. The title query is the primary public search. The body query is retained as a wider discovery signal. No host was used for authentication, wallet probing, or exploitation.&lt;/p&gt;

&lt;p&gt;The public search link for &lt;code&gt;title="BTCPay Server"&lt;/code&gt; can be used to inspect the indexed population. For any authorized instance, use the application's own version endpoint or package metadata. Do not use a page title as a version check.&lt;/p&gt;

&lt;h2&gt;
  
  
  A wallet-aware exposure review
&lt;/h2&gt;

&lt;p&gt;Start by classifying the deployment. Is it a hosted store, a personal node, or a shared merchant instance? Identify whether it uses LND, Core Lightning, or another backend. The macaroon issue is LND-specific, but other backends may have different credential paths.&lt;/p&gt;

&lt;p&gt;Review the network path to the node. The LND listener should not be reachable from the internet. If an external wallet needs access, use the documented authenticated path and the minimum macaroon permissions. Do not expose the node API directly to compensate for a missing integration.&lt;/p&gt;

&lt;p&gt;Inventory macaroons, wallet passwords, seed backups, and automation that can invoke the node. A secret found in a backup or an old deployment directory is still a credential. Rotate it before assuming the patch removed the risk.&lt;/p&gt;

&lt;p&gt;Check application and node logs for wallet-unlock attempts, unexpected payment operations, channel changes, and access to credential files. If exposure is suspected, isolate the host and preserve evidence. Moving funds may be necessary if wallet authority and seed material are both in scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the count does not establish
&lt;/h2&gt;

&lt;p&gt;The 937 title matches do not mean that 937 wallets are exposed. The 4,493 body matches do not prove that the product is running. The zero app count does not prove there are no BTCPay instances. A login page can be healthy while the node listener is misconfigured, and a patched web page can sit in front of an old container.&lt;/p&gt;

&lt;p&gt;The article's useful claim is narrower: BTCPay's public application surface holds wallet-adjacent authority, so discovery has to lead to a node and proxy review. The count tells a defender where to look. The wallet test and the patch state decide whether the finding matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.btcpayserver.org/security-advisory-btcpay-server-2-4-2/" rel="noopener noreferrer"&gt;BTCPay Server security advisory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.btcpayserver.org/Docker/networking/" rel="noopener noreferrer"&gt;BTCPay Docker networking documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.btcpayserver.org/LightningNetwork-Setup/" rel="noopener noreferrer"&gt;BTCPay Lightning Network documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9IkJUQ1BheSBTZXJ2ZXIi" rel="noopener noreferrer"&gt;ZoomEye search for BTCPay Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zoomeye</category>
      <category>payments</category>
      <category>wallets</category>
    </item>
    <item>
      <title>A Maven Central namespace is an ownership control plane</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 06:01:17 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/a-maven-central-namespace-is-an-ownership-control-plane-10f0</link>
      <guid>https://dev.to/ioneyrezende/a-maven-central-namespace-is-an-ownership-control-plane-10f0</guid>
      <description>&lt;h1&gt;
  
  
  A Maven Central namespace is an ownership control plane
&lt;/h1&gt;

&lt;p&gt;Java consumers treat a Maven coordinate as an identity. A group ID such as &lt;code&gt;org.apache&lt;/code&gt; or &lt;code&gt;com.example&lt;/code&gt; tells them which project or organization they believe published the artifact. Maven Central's namespace verification exists to make that expectation meaningful. It is also a security control that many engineering teams never review after the first release.&lt;/p&gt;

&lt;p&gt;Sonatype verifies a requested namespace against a domain or a supported source-control account before publishing access is granted. The process reduces the chance that an unrelated person can publish under another organization's coordinates. It does not prove that every release is honest, that the source code matches the binary, or that the account currently holding the namespace is still controlled by the same team.&lt;/p&gt;

&lt;h2&gt;
  
  
  What verification establishes
&lt;/h2&gt;

&lt;p&gt;The namespace documentation explains that namespaces serve as proof of ownership. DNS-based verification uses a record or delegated authority, while some project hosts can supply a supported proof of account or repository ownership. An example namespace such as &lt;code&gt;org.apache&lt;/code&gt; is intended to signal publication by an authorized person from the Apache Software Foundation.&lt;/p&gt;

&lt;p&gt;That mapping is useful at ecosystem scale because it gives consumers a stable administrative claim. A group ID is not a trademark, a code-signing certificate, or a statement that the artifact has passed review. It is a publishing namespace whose validation depends on the selected ownership method and on the provider's operational handling.&lt;/p&gt;

&lt;p&gt;Organizations can also manage shared namespaces and members through the Central Portal. That turns namespace access into an identity and role problem. The person who originally verified a domain may leave, while the publishing organization still uses the namespace every day. The control must survive staff changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The attack surface is the publishing account
&lt;/h2&gt;

&lt;p&gt;The highest-value target is not the public search page. It is the account or CI credential that can publish a new version under a trusted group ID. A stolen publisher token can create a plausible artifact with a familiar name, a familiar version pattern, and a dependency graph that looks normal. Namespace verification does not stop that if the attacker has legitimate publishing authority.&lt;/p&gt;

&lt;p&gt;Use dedicated publishing identities, preferably tied to short-lived workload credentials rather than a long-lived personal token. Limit who can modify namespace membership. Require a second approval for a new artifact, a new artifact owner, or a change to the publishing workflow. Record the source repository, build system, signing process, and approval for every release.&lt;/p&gt;

&lt;p&gt;Maven Central also imposes immutability expectations on published artifacts. The provider's documentation says consumers should be able to retrieve a dependency exactly as it was originally published. That property helps incident response because a changed artifact under the same coordinate is not a normal release behavior. It does not make a malicious first publication trustworthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transfers and dormant namespaces
&lt;/h2&gt;

&lt;p&gt;A namespace can outlive the project that created it. An old organization may still control a group ID used by downstream applications, but no longer have an active maintainer for that artifact. Transfers, shared access, and account recovery need an owner and a record. Requiring human review for ownership changes is an important safeguard, but it also means stale contact data can delay a legitimate response.&lt;/p&gt;

&lt;p&gt;Consumers should not assume that an artifact is safe because its group ID was verified years ago. Check the publisher identity, repository source, release notes, signatures or attestations when available, and the artifact's dependency behavior. If a project changes its build system, a sudden change in artifact metadata or publishing identity deserves review.&lt;/p&gt;

&lt;p&gt;Organizations should inventory their own namespaces alongside their domains and package registries. For each one, record the owner, verification method, portal organization, automation account, current release path, and recovery contact. Include namespaces for libraries that are no longer developed but still consumed internally.&lt;/p&gt;

&lt;h2&gt;
  
  
  What consumers can infer
&lt;/h2&gt;

&lt;p&gt;A verified namespace supports a narrow statement: the provider accepted an ownership claim for the coordinates. It does not tell a consumer whether the release was built from a reviewed commit, whether the maintainer's laptop was compromised, or whether the dependency is appropriate for the application.&lt;/p&gt;

&lt;p&gt;For a dependency review, use the namespace claim as one signal among several. Compare the requested artifact with the project's documented coordinates and release history. Verify checksums and repository policy. If the build supports provenance or signatures, evaluate them against an identity and policy that the consuming organization controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operational question
&lt;/h2&gt;

&lt;p&gt;The useful question is not "is this group ID on Maven Central?" It is "who can publish to it today, through which account, and how would we detect an unexpected release?" A namespace inventory with no publishing owner is incomplete. A publisher account with no namespace inventory is also incomplete.&lt;/p&gt;

&lt;p&gt;Keep the identity mapping current, restrict publishing authority, and make unexpected coordinate changes visible. That work is less visible than dependency scanning, but it protects the trust relationship that every Maven coordinate asks users to accept.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://central.sonatype.org/register/namespace/" rel="noopener noreferrer"&gt;Sonatype: Register a namespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://central.sonatype.org/faq/namespaces-and-dns/" rel="noopener noreferrer"&gt;Sonatype: Why namespaces are tied to DNS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://central.sonatype.org/faq/verify-ownership/" rel="noopener noreferrer"&gt;Sonatype: Verify project ownership&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://central.sonatype.org/publish/requirements/immutability/" rel="noopener noreferrer"&gt;Sonatype: Maven Central immutability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://central.sonatype.org/publish/publish-portal-organizations/" rel="noopener noreferrer"&gt;Sonatype: Organization management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>supplychain</category>
      <category>mavencentral</category>
      <category>namespace</category>
    </item>
    <item>
      <title>OpenEMIS permissions combine module actions and school scope</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Tue, 10 Nov 2026 02:24:14 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/openemis-permissions-combine-module-actions-and-school-scope-3a86</link>
      <guid>https://dev.to/ioneyrezende/openemis-permissions-combine-module-actions-and-school-scope-3a86</guid>
      <description>&lt;h1&gt;
  
  
  OpenEMIS permissions combine module actions and school scope
&lt;/h1&gt;

&lt;p&gt;OpenEMIS Core manages education data such as institutions, users, roles, and operational records. The support documentation describes a permissions model where a role can allow a user to view particular modules, schools within a region, and actions such as add, edit, delete, or execute features.&lt;/p&gt;

&lt;p&gt;That combination is the security boundary. A module permission says what the user can do, while location and group assignments say where the user can do it. Granting a role without checking the related school or region scope can produce a wider view than the role name suggests.&lt;/p&gt;

&lt;p&gt;ZoomEye returned 35 matches for &lt;code&gt;title="OpenEMIS"&lt;/code&gt; on 2026-11-10 at 00:51 UTC. &lt;code&gt;app="OpenEMIS"&lt;/code&gt; returned zero, and &lt;code&gt;http.body="OpenEMIS"&lt;/code&gt; returned 227. The population is small, but a small external count does not mean the data has low value. The body query is a broad marker and should be treated as a lead rather than a confirmed installation count.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9Ik9wZW5FTUlTIg%3D%3D" rel="noopener noreferrer"&gt;View the title measurement in ZoomEye&lt;/a&gt;. The scope was page 1, page size 1, and &lt;code&gt;sub_type=all&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roles and locations have to be tested together
&lt;/h2&gt;

&lt;p&gt;The OpenEMIS support guide says users can be assigned a role that controls modules, schools, and actions. Administrators can create or adapt roles and configure permissions. That flexibility is useful, but it makes the effective permission set a product of several configuration decisions.&lt;/p&gt;

&lt;p&gt;Create a test user with a role limited to one school or region. Attempt to view another school through the interface and through any available API path. Test the add, edit, delete, and execute actions separately. A person who can view a record should not automatically be able to modify it or export a full population.&lt;/p&gt;

&lt;p&gt;Review user groups as well as roles. The feature documentation lists groups of users, roles, and locations as administrative capabilities. Old groups can survive staff changes and can carry a location scope that is no longer appropriate.&lt;/p&gt;

&lt;h2&gt;
  
  
  API access belongs in the inventory
&lt;/h2&gt;

&lt;p&gt;OpenEMIS documentation lists API access for external systems as an administrative feature, and its data security policy states that access should occur through approved APIs. That makes API consumers part of the identity model. A reporting integration, mobile client, or ministry system may use a separate account with broad access.&lt;/p&gt;

&lt;p&gt;Record the API consumer, owner, credential, source network, permitted data, and rotation date. Test whether the API account is constrained by the same school or region scope as a browser user. If the API only authenticates the consumer and returns all records, the permission model is not complete.&lt;/p&gt;

&lt;p&gt;The data security policy also makes approved access paths part of the control. An ad hoc database connection or exported spreadsheet can bypass application permissions even when the web role is correct. The review should include data extracts and downstream storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the external count changes
&lt;/h2&gt;

&lt;p&gt;The title count gives a small discovery set for a specific education platform. It does not reveal how many student records are present, whether any account is weak, or whether the deployment is a demo. The body count may include references to the project, so it should not be used to claim 227 production systems.&lt;/p&gt;

&lt;p&gt;Use the count to ask whether every internet-visible installation has a business owner and a reason to be public. A school information system may be reached through a regional gateway, a vendor host, or a national service. The owner of the web tier is not always the owner of the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review
&lt;/h2&gt;

&lt;p&gt;Build a matrix of role, module, action, school, region, and user group. Include API consumers and support accounts. Check joiners, movers, and leavers. Remove group scopes that are no longer needed and require an approval record for new execute or delete rights.&lt;/p&gt;

&lt;p&gt;Test with real authorization boundaries, not only a successful login. The expected result is that a user can complete the needed task in the assigned school and cannot discover another school by editing an identifier. That test is more useful than a count, but the count is a reason to begin.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.openemis.org/core/en/managing-permissions/" rel="noopener noreferrer"&gt;OpenEMIS: Managing permissions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.openemis.org/exams/security-users-groups-and-roles/" rel="noopener noreferrer"&gt;OpenEMIS: Security, users, groups and roles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.openemis.org/wp-content/uploads/2019/10/OpenEMIS_Data_Security_Policy.pdf" rel="noopener noreferrer"&gt;OpenEMIS data security policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zoomeye.ai/searchResult?q=dGl0bGU9Ik9wZW5FTUlTIg%3D%3D" rel="noopener noreferrer"&gt;ZoomEye title measurement for OpenEMIS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Measurement metadata: 2026-11-10 00:51 UTC, &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, pagesize 1; title 35, app 0, body 227.&lt;/p&gt;

</description>
      <category>zoomeye</category>
      <category>education</category>
      <category>permissions</category>
    </item>
    <item>
      <title>Gokapi API keys and OIDC sessions need different review paths</title>
      <dc:creator>Ioneyrezende</dc:creator>
      <pubDate>Mon, 09 Nov 2026 23:04:03 +0000</pubDate>
      <link>https://dev.to/ioneyrezende/gokapi-api-keys-and-oidc-sessions-need-different-review-paths-5f52</link>
      <guid>https://dev.to/ioneyrezende/gokapi-api-keys-and-oidc-sessions-need-different-review-paths-5f52</guid>
      <description>&lt;h1&gt;
  
  
  Gokapi API keys and OIDC sessions need different review paths
&lt;/h1&gt;

&lt;p&gt;Gokapi shares files through a web interface and an API. The official documentation says API calls require an API key. The setup documentation also describes OIDC delegation, where an external identity provider can handle browser authentication while API calls continue to use Gokapi's key model.&lt;/p&gt;

&lt;p&gt;That split is useful. It also means a deployment can look well protected in the browser while service integrations retain independent credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  Count-only evidence
&lt;/h2&gt;

&lt;p&gt;On 10 November 2026, ZoomEye observations used &lt;code&gt;sub_type=all&lt;/code&gt;, page 1, and page size 1. &lt;code&gt;http.body="Gokapi"&lt;/code&gt; returned &lt;strong&gt;121&lt;/strong&gt; matches. &lt;code&gt;title="Gokapi"&lt;/code&gt; returned &lt;strong&gt;8&lt;/strong&gt;, and &lt;code&gt;app="Gokapi"&lt;/code&gt; returned &lt;strong&gt;0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The selected query is the &lt;a href="https://www.zoomeye.ai/searchResult?q=aHR0cC5ib2R5PSJHb2thcGki" rel="noopener noreferrer"&gt;ZoomEye result for &lt;code&gt;http.body="Gokapi"&lt;/code&gt;&lt;/a&gt;. The larger body count does not prove there are 121 servers. It indicates pages whose content contains the product name. The small title and application counts show why a single field is a poor inventory strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inventory the API surface
&lt;/h2&gt;

&lt;p&gt;For each integration, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the API key identifier and owner;&lt;/li&gt;
&lt;li&gt;the operations the key can perform;&lt;/li&gt;
&lt;li&gt;the files or groups it can reach;&lt;/li&gt;
&lt;li&gt;the client host and network path;&lt;/li&gt;
&lt;li&gt;creation, rotation, and expiry dates;&lt;/li&gt;
&lt;li&gt;the person or team that can revoke it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not use one key for every script. A key that can create, list, and delete files has more authority than a key that only uploads. If the application supports per-key permissions, test them with a denied operation. If it does not, compensate with network restrictions and a dedicated deployment.&lt;/p&gt;

&lt;p&gt;Store keys outside the application repository. A Docker environment file, a CI variable, and a shell history file are all common leak locations. Use a secret manager and inject the key at runtime. Log the key identifier, never the full secret.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review OIDC and internal authentication
&lt;/h2&gt;

&lt;p&gt;When OIDC is enabled, record the issuer, client ID, redirect URI, and allowed groups. Test that a user outside the intended tenant is rejected. Check whether enabling OIDC disables local browser authentication while leaving API keys active. The review must cover both outcomes.&lt;/p&gt;

&lt;p&gt;If internal accounts remain, define who can create them and how they are removed. The Gokapi setup documentation describes a login at &lt;code&gt;/admin&lt;/code&gt; and an optional key-management page. Protect that route with a private network or an identity-aware proxy even when OIDC is enabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  File lifecycle
&lt;/h2&gt;

&lt;p&gt;A share can have a password, an expiry, and a download limit. Test each control independently. A password does not replace expiry, and an expiry does not prove the storage object was deleted. Check the storage backend after the application reports removal.&lt;/p&gt;

&lt;p&gt;If cloud storage is used, separate the application's credentials from the users who read the bucket. Enable object versioning only when the retention policy accounts for deleted shares. Otherwise a deleted file may remain recoverable through an old version.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical review
&lt;/h2&gt;

&lt;p&gt;Use 121 body matches as a starting point for ownership verification. For each confirmed instance, identify the admin route, OIDC configuration, API keys, storage backend, and retention policy. Ask whether the service is meant to be public.&lt;/p&gt;

&lt;p&gt;Gokapi's split between browser identity and API keys is reasonable. The control only works when both paths are inventoried and revoked together. A well-protected admin page and an old integration key can coexist on the same deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gokapi.readthedocs.io/en/latest/advanced.html" rel="noopener noreferrer"&gt;Gokapi advanced usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gokapi.readthedocs.io/en/latest/setup.html" rel="noopener noreferrer"&gt;Gokapi setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gokapi.readthedocs.io/en/latest/usage.html" rel="noopener noreferrer"&gt;Gokapi usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Forceu/Gokapi/releases" rel="noopener noreferrer"&gt;Gokapi releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
