<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA["Unlock instructions" email due to brute force attack on gitlab users]]></title><description><![CDATA[<p dir="auto">Running v1.104.4 since 5 days ago.  Suddenly a large number of ourGitlab users have received the message below (both cloudron and external login accounts).  There are no failed signin attempts in the log, that I can see.   Did anyone else have this issue?</p>
<p dir="auto">From: GitLab <a href="mailto:git.app@xxxx" target="_blank" rel="noopener noreferrer nofollow ugc">git.app@xxxx</a><br />
Sent: xxxx<br />
To: xxxxx<br />
Subject: Unlock instructions</p>
<p dir="auto">GitLab<br />
Hello, xxxx!</p>
<p dir="auto">Your GitLab account has been locked due to an excessive number of unsuccessful sign in attempts. You can wait for your account to automatically unlock in 10 minutes or you can click the link below to unlock now.<br />
Unlock account</p>
<p dir="auto">If you did not initiate these sign-in attempts, please reach out to your administrator or enable two-factor authentication (2FA) on your account.</p>
]]></description><link>https://forum.cloudron.io/topic/14102/unlock-instructions-email-due-to-brute-force-attack-on-gitlab-users</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Jul 2026 16:32:57 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/14102.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Jul 2025 08:46:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Sun, 27 Jul 2025 18:14:02 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/allanbowe" aria-label="Profile: allanbowe">@<bdi>allanbowe</bdi></a><br />
Not by default from Cloudron. (Maybe in the future)</p>
<p dir="auto">I would advise to temporary edit the GitLab NGINX file to only allow certain IP addresses.<br />
This manual change will get reset with every Cloudron / Server / App restart.<br />
So it is really temporary.</p>
<p dir="auto">Example for APP ID <code>682ca768-93e5-4bcb-a760-677daa9a8e3b</code></p>
<p dir="auto">Go into the application NGINX config folder:</p>
<pre><code>cd /home/yellowtent/platformdata/nginx/applications/682ca768-93e5-4bcb-a760-677daa9a8e3b
</code></pre>
<p dir="auto">Edit the <code>sub.domain.tld.conf</code> file, in this case <code>dokuwiki.cloudron.dev</code>:</p>
<pre><code>nano dokuwiki.cloudron.dev.conf
</code></pre>
<p dir="auto">Inside this section, add:</p>
<pre><code># https server
server {
    
    # allow localhost
    allow 127.0.0.1;
    # allow cloudron proxy
    allow 172.18.0.1;
    # allow this servers public ipv4
    allow REDACTED-IPV4;
    # allow this servers public ipv6
    allow REDACTED-IPV6;
    # Allow some other specific IPv4 e.g VPN
    allow VPN-IP;
    # deny all other
    deny all;
    [...]
}
</code></pre>
<p dir="auto">Reload the NGINX service:</p>
<pre><code class="language-bash">systemctl reload nginx.service
</code></pre>
<p dir="auto">This will result for other IPs that are not explicitly allowed to return a <code>403 Forbidden</code>:<br />
<img src="/assets/uploads/files/1753639364452-52b04087-811c-4d9f-8a90-2b20cb5de9f4-image.png" alt="52b04087-811c-4d9f-8a90-2b20cb5de9f4-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Keep in mind, every Cloudron / Server / App Restart will reset this change!</p>
]]></description><link>https://forum.cloudron.io/post/110756</link><guid isPermaLink="true">https://forum.cloudron.io/post/110756</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Sun, 27 Jul 2025 18:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Sun, 27 Jul 2025 11:37:10 GMT]]></title><description><![CDATA[<p dir="auto">Is there a way to restrict access to a cloudron app to users on the cloudron VPN?</p>
<p dir="auto">I did not realise this was a feature - it would be amazing, very (very) useful indeed</p>
]]></description><link>https://forum.cloudron.io/post/110747</link><guid isPermaLink="true">https://forum.cloudron.io/post/110747</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Sun, 27 Jul 2025 11:37:10 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Fri, 25 Jul 2025 17:21:56 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/allanbowe" aria-label="Profile: allanbowe">@<bdi>allanbowe</bdi></a><br />
I would assume this is a temporary automated attack.<br />
Maybe it would be a good idea to only allow access to Cloudron or GitLab from a VPN for some days.<br />
This way the bots will notice action was taken and will not resume for some while or stop completely.</p>
]]></description><link>https://forum.cloudron.io/post/110697</link><guid isPermaLink="true">https://forum.cloudron.io/post/110697</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Fri, 25 Jul 2025 17:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Fri, 25 Jul 2025 13:03:51 GMT]]></title><description><![CDATA[<p dir="auto">One thought is that now the usernames are "known", the attacker can continue the login attempts (even though they are futile).</p>
<p dir="auto">So our new approach is to delete the old accounts and create new ones.</p>
]]></description><link>https://forum.cloudron.io/post/110685</link><guid isPermaLink="true">https://forum.cloudron.io/post/110685</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Fri, 25 Jul 2025 13:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Fri, 25 Jul 2025 13:04:15 GMT]]></title><description><![CDATA[<p dir="auto">So it turns out this does NOT stop the "Unlock Instructions" email being sent.   They even continue after forcing 2FA for all users.<br />
What is more, we even get the emails for internal staff, who don't even have a password  - because they authenticate using OIDC in cloudron.</p>
<p dir="auto">Any suggestions?</p>
]]></description><link>https://forum.cloudron.io/post/110684</link><guid isPermaLink="true">https://forum.cloudron.io/post/110684</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Fri, 25 Jul 2025 13:04:15 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Tue, 22 Jul 2025 21:39:24 GMT]]></title><description><![CDATA[<p dir="auto">Just discovered a setting at the following path:  /admin/application_settings/general#js-visibility-settings</p>
<p dir="auto">Section:  Restricted visibility levels<br />
Setting: Public - If selected, only administrators are able to create public groups, projects, and snippets. Also, <strong>profiles are only visible to authenticated users.</strong></p>
<p dir="auto"><img src="/assets/uploads/files/1753220356420-0b3371ff-5bf9-4b28-bf75-8b8a8fceb58a-image.png" alt="0b3371ff-5bf9-4b28-bf75-8b8a8fceb58a-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">After checking this, and testing with CURL, the /api/v4/users/XXX endpoints now consistently return a 404 whether authenticated or not!!</p>
<p dir="auto">I suspect this is the fix, but will wait and see if there are any more "Unlock Instructions" emails tonight / tomorrow.</p>
<p dir="auto">Weirdly, after checking this checkbox and hitting save, it gets unchecked immediately after - but refreshing the page shows that it was indeed checked.</p>
<p dir="auto">Another side note - we saw in our email logs that we were getting a large number of requests from a subdomain of <a href="https://academyforinternetresearch.org/" target="_blank" rel="noopener noreferrer nofollow ugc">https://academyforinternetresearch.org/</a></p>
<p dir="auto">So it seems that this could be an issue on their radar.</p>
]]></description><link>https://forum.cloudron.io/post/110598</link><guid isPermaLink="true">https://forum.cloudron.io/post/110598</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Tue, 22 Jul 2025 21:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Tue, 22 Jul 2025 20:31:14 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/allanbowe" aria-label="Profile: allanbowe">@<bdi>allanbowe</bdi></a> said in <a href="/post/110586">"Unlock instructions" email due to brute force attack on gitlab users</a>:</p>
<blockquote>
<p dir="auto">Suggestions (to the packaging team) for improvement:</p>
<pre><code>A hardened Gitlab configuration "out of the box" in cloudron
Updates to the documentation (eg that the logs location is under /home/git/gitlab/log). Maybe even putting that location in the file explorer, to make log capture / analysis easier.
Options within the cloudron platform itself to more aggressively reject IP addresses. It was noted that some attacker IPs were re-used after some time.
</code></pre>
</blockquote>
<p dir="auto">Agreed.</p>
<p dir="auto">I'd add: copy the salient bits of above post (or at least link to it) into the docs too.</p>
]]></description><link>https://forum.cloudron.io/post/110595</link><guid isPermaLink="true">https://forum.cloudron.io/post/110595</guid><dc:creator><![CDATA[jdaviescoates]]></dc:creator><pubDate>Tue, 22 Jul 2025 20:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Tue, 22 Jul 2025 19:47:27 GMT]]></title><description><![CDATA[<p dir="auto">So it appears that unauthenticated users (or attackers) are able to brute force usernames due to the fact that the corresponding API endpoints are not authenticated:  <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/297473" target="_blank" rel="noopener noreferrer nofollow ugc">https://gitlab.com/gitlab-org/gitlab/-/issues/297473</a></p>
<p dir="auto">Furthermore, the gitlab team do not plan to fix the issue:</p>
<ul>
<li><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/16179" target="_blank" rel="noopener noreferrer nofollow ugc">https://gitlab.com/gitlab-org/gitlab/-/issues/16179</a></li>
<li><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/336601" target="_blank" rel="noopener noreferrer nofollow ugc">https://gitlab.com/gitlab-org/gitlab/-/issues/336601</a></li>
</ul>
<p dir="auto">To mitigate the risk from such attacks in the future we took the following measures:</p>
<p dir="auto">Actions taken on the server:</p>
<ul>
<li>Installed Fail2ban</li>
</ul>
<p dir="auto">Actions taken on the platform (cloudron):</p>
<ul>
<li>Removed several platform apps that were not being used</li>
<li>Restricted visibility of (and access to) the gitlab instance to just those who need it</li>
<li>Removed several users</li>
</ul>
<p dir="auto">Actions taken on the gitlab instance (cloudron container):</p>
<ul>
<li>Enabled 2FA (we had it natively on cloudron / OIDC but not for guest users)</li>
<li>Removed Oauth apps that are no longer used</li>
<li>Enabled "Deactivate dormant users after a period of inactivity" (90 days)</li>
<li>Enabled "Enable unauthenticated API request rate limit" (1 per second)</li>
<li>Enabled "Enable unauthenticated web request rate limit" (1 per second)</li>
<li>Enabled "Enable authenticated API request rate limit" (2 per second)</li>
<li>Enabled "Enable authenticated API request rate limit" (2 per second)</li>
<li>Deleted 3 inactive runners and removed one active but no longer needed runner</li>
<li>Removed dormant users</li>
</ul>
<p dir="auto">Suggestions (to the packaging team) for improvement:</p>
<ul>
<li>A hardened Gitlab configuration "out of the box" in cloudron</li>
<li>Updates to the <a href="https://docs.cloudron.io/packages/gitlab/" target="_blank" rel="noopener noreferrer nofollow ugc">documentation</a> (eg that the logs location is under <code>/home/git/gitlab/log</code>).  Maybe even putting that location in the file explorer, to make log capture / analysis easier.</li>
<li>Options within the cloudron platform itself to more aggressively reject IP addresses.  It was noted that some attacker IPs were re-used after some time.</li>
</ul>
]]></description><link>https://forum.cloudron.io/post/110586</link><guid isPermaLink="true">https://forum.cloudron.io/post/110586</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Tue, 22 Jul 2025 19:47:27 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Tue, 22 Jul 2025 18:37:11 GMT]]></title><description><![CDATA[<p dir="auto">I found the logs - they were inside the container at <code>/home/git/gitlab/log</code></p>
<p dir="auto">Running <code>grep -i "failed"</code> revealed that the attack started in the early morning of 20th June.  Somehow the list of usernames was known (probably relates to the issue in the link in my previous post) and signin requests are being made from random ip addresses.</p>
<p dir="auto">First 5 entries shown below (this pattern has continued since):</p>
<pre><code>./application_json.log:{"severity":"INFO","time":"2025-07-20T03:17:13.349Z","correlation_id":"xxx","meta.caller_id":"SessionsController#create","meta.feature_category":"system_access","meta.organization_id":1,"meta.remote_ip":"156.146.59.50","meta.client_id":"ip/156.146.59.50","message":"Failed Login: username=xxx1 ip=156.146.59.50"}
./application_json.log:{"severity":"INFO","time":"2025-07-20T03:18:20.163Z","correlation_id":"xxx","meta.caller_id":"SessionsController#create","meta.feature_category":"system_access","meta.organization_id":1,"meta.remote_ip":"193.176.84.35","meta.client_id":"ip/193.176.84.35","message":"Failed Login: username=xxx2 ip=193.176.84.35"}
./application_json.log:{"severity":"INFO","time":"2025-07-20T03:18:39.636Z","correlation_id":"xxx","meta.caller_id":"SessionsController#create","meta.feature_category":"system_access","meta.organization_id":1,"meta.remote_ip":"20.205.138.223","meta.client_id":"ip/20.205.138.223","message":"Failed Login: username=xxxx3 ip=20.205.138.223"}
./application_json.log:{"severity":"INFO","time":"2025-07-20T03:19:04.255Z","correlation_id":"xxx","meta.caller_id":"SessionsController#create","meta.feature_category":"system_access","meta.organization_id":1,"meta.remote_ip":"98.152.200.61","meta.client_id":"ip/98.152.200.61","message":"Failed Login: username=xxx4 ip=98.152.200.61"}
./application_json.log:{"severity":"INFO","time":"2025-07-20T03:21:03.314Z","correlation_id":"xxx","meta.caller_id":"SessionsController#create","meta.feature_category":"system_access","meta.organization_id":1,"meta.remote_ip":"200.34.32.138","meta.client_id":"ip/200.34.32.138","message":"Failed Login: username=xxx5 ip=200.34.32.138"}
</code></pre>
]]></description><link>https://forum.cloudron.io/post/110569</link><guid isPermaLink="true">https://forum.cloudron.io/post/110569</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Tue, 22 Jul 2025 18:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 20:46:18 GMT]]></title><description><![CDATA[<p dir="auto">I found this thread which implies that it is a known issue in gitlab:  <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/297473" target="_blank" rel="noopener noreferrer nofollow ugc">https://gitlab.com/gitlab-org/gitlab/-/issues/297473</a></p>
]]></description><link>https://forum.cloudron.io/post/110546</link><guid isPermaLink="true">https://forum.cloudron.io/post/110546</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Mon, 21 Jul 2025 20:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 19:22:08 GMT]]></title><description><![CDATA[<p dir="auto">It was from my user but I also did this with one of the locked users and it was the same result (only shows successful logins).  This was after the restart.</p>
]]></description><link>https://forum.cloudron.io/post/110545</link><guid isPermaLink="true">https://forum.cloudron.io/post/110545</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Mon, 21 Jul 2025 19:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 19:01:57 GMT]]></title><description><![CDATA[<p dir="auto">The image you shared is of one user.<br />
Is this your user or one of the locked users?<br />
You can impersonate such a user and view this section as the user.</p>
]]></description><link>https://forum.cloudron.io/post/110543</link><guid isPermaLink="true">https://forum.cloudron.io/post/110543</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Mon, 21 Jul 2025 19:01:57 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 17:28:48 GMT]]></title><description><![CDATA[<p dir="auto">I found the cloudron app logs of the gitlab app under <code>/home/yellowtent/platformdata/logs/$APPID</code> and tried the following:</p>
<p dir="auto"><img src="/assets/uploads/files/1753118241739-20f696b9-ade0-430c-ba82-751b37ee50fd-image.png" alt="image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Neither gave any result.</p>
<p dir="auto">I wasn't able to find the gitlab internal logs..</p>
]]></description><link>https://forum.cloudron.io/post/110542</link><guid isPermaLink="true">https://forum.cloudron.io/post/110542</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Mon, 21 Jul 2025 17:28:48 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 17:28:10 GMT]]></title><description><![CDATA[<p dir="auto">Gotcha.  According to the link you provided:</p>
<pre><code>Audit events of failed logins are currently recorded only on GitLab Starter and visible 
under GitLab Premium (via Admin Area &gt; Audit Log)🤕. Having those events surfaced 
under Authentication log would means either one of these two things:

1. Move failed login audit events completely to GitLab Core
2. Add an extra EE version of Authentication log for licensed customer (i.e. for GitLab Premium)
</code></pre>
<p dir="auto">Here is what I do see in that location:</p>
<p dir="auto"><img src="/assets/uploads/files/1753115361383-d3834ff1-b987-4510-a863-a89e9a419b22-image.png" alt="image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">So for some reason the failed events are not shown.</p>
<p dir="auto">What is also interesting.  When the event happened, the affected user(s) DID have a value in the "Locked account email verification code last sent at:" field under  "/admin/users/XXXX".  But after restarting the box, that entry is empty again.  Not sure if that happened automatically after 10 minutes though.</p>
]]></description><link>https://forum.cloudron.io/post/110539</link><guid isPermaLink="true">https://forum.cloudron.io/post/110539</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Mon, 21 Jul 2025 17:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 12:28:13 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/allanbowe" aria-label="Profile: allanbowe">@<bdi>allanbowe</bdi></a> see <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/233377" target="_blank" rel="noopener noreferrer nofollow ugc">https://gitlab.com/gitlab-org/gitlab/-/issues/233377</a> for details about Authentication Log for users</p>
]]></description><link>https://forum.cloudron.io/post/110524</link><guid isPermaLink="true">https://forum.cloudron.io/post/110524</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Mon, 21 Jul 2025 12:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 12:00:12 GMT]]></title><description><![CDATA[<p dir="auto">I was thinking about cloudron, yes</p>
<p dir="auto">The admin UI doesn't appear to have a "System Logs" option</p>
<p dir="auto"><img src="/assets/uploads/files/1753099192653-3496877d-827f-466b-9261-89875886a737-image.png" alt="image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">The user accounts affected are indeed locked</p>
]]></description><link>https://forum.cloudron.io/post/110523</link><guid isPermaLink="true">https://forum.cloudron.io/post/110523</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Mon, 21 Jul 2025 12:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 11:40:57 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/allanbowe" aria-label="Profile: allanbowe">@<bdi>allanbowe</bdi></a><br />
Just to clarify, I am not writing about the Cloudron App Log of the GitLab app.<br />
But the GitLab Administration UI itself for the User Accounts effected and the System logs inside the GitLab Administartion View.<br />
Did you mean this for sending a copy in a dm?</p>
]]></description><link>https://forum.cloudron.io/post/110522</link><guid isPermaLink="true">https://forum.cloudron.io/post/110522</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Mon, 21 Jul 2025 11:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Tue, 22 Jul 2025 20:16:03 GMT]]></title><description><![CDATA[<p dir="auto">Not on the day that it happened, happy to dm a (sanitised) copy</p>
]]></description><link>https://forum.cloudron.io/post/110518</link><guid isPermaLink="true">https://forum.cloudron.io/post/110518</guid><dc:creator><![CDATA[allanbowe]]></dc:creator><pubDate>Tue, 22 Jul 2025 20:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to "Unlock instructions" email due to brute force attack on gitlab users on Mon, 21 Jul 2025 10:01:53 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/allanbowe" aria-label="Profile: allanbowe">@<bdi>allanbowe</bdi></a><br />
Thanks for reporting.<br />
Are there really no logs inside GitLab showing any failed login attempts for the affected accounts?</p>
]]></description><link>https://forum.cloudron.io/post/110506</link><guid isPermaLink="true">https://forum.cloudron.io/post/110506</guid><dc:creator><![CDATA[james]]></dc:creator><pubDate>Mon, 21 Jul 2025 10:01:53 GMT</pubDate></item></channel></rss>