Do It by Code
54 subscribers
714 photos
100 videos
15 files
1.24K links
We uhhhhh... do things by coding them.
Download Telegram
Avoid Updating your MinIO instance
developers introduce trojan horse update stripping community edition of most features in the UI

I noticed today that my MinIO docker image had been updated and the UI was stripped down to just an object browser. After some digging I found this disgusting PR that removes away all the features in the UI. 110k lines effectively removed and most features including admin functions gone. The discussion around this PR is locked and one of the developers points users to their commercial product instead.


https://github.com/minio/object-browser/pull/3509

#minio
1
before and after

#minio
5
Windows Server 2025 dMSA Vulnerability

A privilege escalation flaw has been demonstrated in Windows Server 2025 that makes it possible for attackers to compromise any user in Active Directory (AD).

"The attack exploits the delegated Managed Service Account (dMSA) feature that was introduced in Windows Server 2025, works with the default configuration, and is trivial to implement," Akamai security researcher Yuval Gordon said in a report.


What is dMSA?

A new account type known as delegated Managed Service Account (dMSA) is introduced in Windows Server 2025 that allows migration from a traditional service account to a machine account with managed and fully randomized keys, while disabling original service account passwords. Authentication for dMSA is linked to the device identity, which means that only specified machine identities mapped in Active Directory (AD) can access the account.


- blog
- PoC (PowerShell)
2
Mkcert: Simple zero-config tool to make locally trusted development certificates

https://github.com/FiloSottile/mkcert
1
dotnet run app.cs

.NET 10 Preview 4 introduces file-based apps, allowing direct execution of C# files using dotnet run. This feature streamlines development, especially for beginners, and supports directives, NuGet packages, and cross-platform scripting.
Do It by Code
dotnet run app.cs .NET 10 Preview 4 introduces file-based apps, allowing direct execution of C# files using dotnet run. This feature streamlines development, especially for beginners, and supports directives, NuGet packages, and cross-platform scripting.
Referencing NuGet packages with #:package

#:package Humanizer@2.14.1

using Humanizer;

var dotNet9Released = DateTimeOffset.Parse("2024-12-03");
var since = DateTimeOffset.Now - dotNet9Released;

Console.WriteLine($"It has been {since.Humanize()} since .NET 9 was released.");
Do It by Code
dotnet run app.cs
so I just noticed they made their devblog with php and wordpress
1
Forwarded from Gregory Klyushnikov
AI is a solution in a desperate search of a problem, just like blockchain. AI is very good at solving some very specific tasks, like data classification or generation of new data based on a prompt (image generation, speech synthesis, etc), but to use it for anything else is nothing but pure hype
👍1
CVE-2025-48827

Unauthenticated API Access in vBulletin:
vBulletin 5.0.0 through 5.7.5 and 6.0.0 through 6.0.3 allows unauthenticated users to invoke protected API controllers' methods when running on PHP 8.1 or later, as demonstrated by the /api.php?method=protectedMethod pattern, as exploited in the wild in May 2025.



- blog
- PoC (gist)
- PoC (by EgiX)
- kevintel
- CWE-424: Improper Protection of Alternate Path
- CWE-424 Example

#vulnerability #rce
🤓1
Recursive mutex misuse

Recursive mutex misuse occurs when a thread incorrectly attempts to acquire a recursive mutex multiple times from the same thread without first unlocking it, leading to a deadlock or unexpected behavior.


What is a Recursive Mutex?

• A recursive mutex (also known as a reentrant mutex) allows a thread to acquire the same mutex multiple times from the same thread without causing a deadlock.
• Each time the mutex is locked, an internal counter is incremented. The mutex is only released when the counter reaches zero, which happens when the thread unlocks the mutex the same number of times it locked it.


Potential Misuse Scenarios:

1. Incorrect Unlock Amount:
If a thread locks a recursive mutex multiple times but then unlocks it fewer times than it locked it, the mutex may become "permanently locked" in the sense that no other thread can acquire it.

2. Calling Unsafe Code:
If a thread accidentally calls unsafe code while holding a recursive mutex, and then attempts to lock it again, it could lead to unpredictable behavior.

3. Misunderstanding the Purpose:
Recursive mutexes are designed for situations where a thread needs to acquire the same mutex multiple times within the same execution context, such as when a function calls itself or when multiple parts of an object need to be protected by the same lock. Misusing them for situations where they're not necessary can lead to performance overhead and make the code harder to understand.
Do It by Code
2. Calling Unsafe Code:
Unsafe Code: "Unsafe" code typically refers to:
1. Code that can bypass the language's safety guarantees
2. Code that might interact directly with hardware or memory
3. Code that could cause undefined behavior

The Problem Scenario:

1. Thread acquires a recursive mutex (locks it)
2. While holding this lock, it calls some "unsafe" code
3. This unsafe code tries to lock the same mutex again
4. Something goes wrong because the unsafe code doesn't follow proper rules

Example in C++:


#include <mutex>
#include <iostream>

std::recursive_mutex rmutex;

void unsafe_function() {
// This function doesn't properly handle the mutex
// Maybe it was written by another team or uses a C library

// It tries to lock the mutex but doesn't unlock it properly
rmutex.lock();

// Maybe it throws an exception or returns early
throw std::runtime_error("Something went wrong!");

// The unlock never happens!
rmutex.unlock();
}

void normal_function() {
// Lock the recursive mutex
rmutex.lock();

std::cout << "Doing some work with the lock held" << std::endl;

try {
// Call the unsafe function while holding the lock
unsafe_function();
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}

// We think we only need to unlock once, but the unsafe function
// has left the mutex in an inconsistent state
rmutex.unlock();
}


The real danger is that unsafe code might:
- Not follow proper locking/unlocking patterns
- Manipulate the mutex's internal state directly
- Cause memory corruption that affects the mutex
- Create deadlocks or resource leaks

This is why languages with memory safety like Rust mark such operations as unsafe - they're telling you "be extremely careful here, the compiler can't protect you."