ARK. B10Parametr monitoringuBezpieczeństwo · lista 50 parametrów

Dostępność xmlrpc.php

ważność wysokamierzonysposób exposure

Czy xmlrpc.php przyjmuje wywołania (zapytanie POST o listę metod) zamiast być zablokowany. Wektor ataków brute-force i amplifikacji DDoS.

ARK. 1

WIKI

artykuł z 16.09.2026 · źródeł 10

Dostępność xmlrpc.php to parametr monitoringu stron WordPress, który sprawdza, czy plik /xmlrpc.php przyjmuje wywołania XML-RPC, zamiast je odrzucać. Pomiar polega na wysłaniu zapytania o listę metod i kończy się jednym z trzech wyników: serwer zwraca listę metod, odrzuca wywołanie albo nie odpowiada w wyznaczonym czasie. XML-RPC to interfejs WordPressa do zdalnej pracy z witryną, który zastąpił starsze interfejsy Blogger, MovableType i metaWeblog [1].

Jak działa

Serwer XML-RPC w WordPressie przyjmuje wyłącznie żądania POST. Na żądanie innego typu odpowiada kodem 405, nagłówkiem Allow: POST i komunikatem, że obsługuje tylko POST [3]. Zwykłe otwarcie pliku metodą GET nie mówi więc, czy interfejs działa. Lista metod obejmuje przestrzenie wp., blogger., metaWeblog., mt. i pingback., a filtr xmlrpc_methods pozwala metody dodawać i usuwać [4]. Do tej listy serwer zawsze dokłada trzy metody systemowe: system.getCapabilities, system.listMethods i system.multicall [3].

Metoda system.multicall wykonuje w pętli tablicę wywołań przekazaną w jednym żądaniu HTTP. Kod nie ogranicza liczby wywołań w tablicy, blokuje jedynie zagnieżdżanie system.multicall w samym sobie [3]. Metody wymagające uwierzytelnienia przyjmują login i hasło w każdym wywołaniu i sprawdzają je funkcją logowania serwera [4].

RYS. 1.1system.multicall: wiele haseł w jednym żądaniu

Wyłączenie interfejsu bywa rozumiane zbyt szeroko. Filtr xmlrpc_enabled, dostępny od wersji 3.5.0 i domyślnie ustawiony na true, steruje tylko metodami wymagającymi uwierzytelnienia, na przykład publikowaniem [2]. Dokumentacja zaznacza, że filtr nie decyduje o pingbackach ani o innych metodach bez uwierzytelnienia [2]. Po jego wyłączeniu logowanie przez XML-RPC kończy się błędem 405 z komunikatem „XML-RPC services are disabled on this site” [4], ale plik nadal przyjmuje wywołania.

Standardy i specyfikacje

  • XML-RPC WordPress API opisuje interfejs jako następcę API Blogger, MovableType i metaWeblog, z grupami metod dla wpisów, taksonomii, mediów, komentarzy, opcji i użytkowników [1].
  • Filtr xmlrpc_enabled (od 3.5.0) włącza i wyłącza wyłącznie metody z uwierzytelnieniem [2].
  • Serwer IXR w kodzie WordPressa odpowiada za obsługę tylko metody POST, metody systemowe i wykonywanie system.multicall [3].
  • Metoda pingback.ping przyjmuje adres strony źródłowej i docelowej. Sprawdza, czy cel jest wpisem tej witryny z otwartymi pingami, a potem pobiera stronę źródłową z limitem 10 s, bez przekierowań, do 150 KB, z nagłówkiem X-Pingback-Forwarded-For zawierającym adres zlecającego [4].

Zagrożenia i skutki

Amplifikacja zgadywania haseł. W październiku 2015 roku Sucuri opisał ataki, w których jedno żądanie z system.multicall zawierało setki prób hasła. Trzy lub cztery żądania HTTP wystarczały na tysiące haseł i omijały narzędzia wykrywające zgadywanie haseł [5]. W większości ataków używano metody wp.getCategories, ale nadaje się do tego każda metoda wymagająca uwierzytelnienia [5]. Sucuri śledził te ataki od 10 września 2015 roku, a 7 października zanotował ok. 60 000 takich żądań [5]. Obecny kod rdzenia po pierwszym nieudanym uwierzytelnieniu oznacza instancję serwera i każdą kolejną próbę w tym samym żądaniu odrzuca bez sprawdzania hasła [4]. Jedno żądanie daje wtedy jedną próbę hasła, ale zgadywanie przez XML-RPC pojedynczymi żądaniami pozostaje możliwe.

Odbicie ruchu przez pingback. W marcu 2014 roku Sucuri naliczył ponad 162 000 legalnych stron WordPress, które w ciągu kilku godzin wzięły udział w ataku DDoS na jedną witrynę, generując setki żądań na sekundę [6]. Atakujący wysyłał do xmlrpc.php żądanie POST z metodą pingback.ping i adresem ofiary jako stroną źródłową, a strony pobierały ten adres [6]. W logach ofiary żądania miały w nagłówku User-Agent wersję WordPressa, a losowe parametry w adresie omijały pamięć podręczną [6]. Sucuri zaznaczył, że zachowanie nie zostanie poprawione, bo jest funkcją, z której korzystają wtyczki, i zalecił filtr usuwający pingback.ping z listy metod [6].

RYS. 1.2Pingback jako odbicie ruchu

SSRF przez pingback. CVE-2013-0235 dotyczy WordPressa przed wersją 3.5.1: spreparowany adres źródłowy pingbacku pozwalał wysyłać żądania HTTP do serwerów w sieci wewnętrznej i skanować porty [7]. CVE-2022-3590 opisuje ślepy SSRF w pingbacku bez uwierzytelnienia: wyścig między walidacją adresu a żądaniem HTTP pozwala dotrzeć do wewnętrznych hostów, które walidacja miała wykluczyć; NVD ocenia go na 5,9 w skali CVSS [8].

Przykłady

XML-RPC ma legalnych użytkowników. Jetpack łączy się przez ten protokół z WordPress.com, a zablokowanie pliku zrywa to połączenie [9]. Jetpack nie przesyła przy tym loginu i hasła, tylko używa tokenów podobnych do OAuth [9]. Aplikacja mobilna wymaga dostępnego punktu końcowego XML-RPC; część firm hostingowych i wtyczek bezpieczeństwa go blokuje, a obejściem jest logowanie kontem WordPress.com, gdy strona ma połączony Jetpack [10].

KonfiguracjaOdpowiedź na POST system.listMethodsZnaczenie
Instalacja domyślna [3] [4]200 z listą metod, w tym system.multicall i pingback.pingpełny interfejs
xmlrpc_enabled ustawione na false [2]200 z listą metodlogowanie odrzucane kodem 405, pingback działa [4]
Filtr usuwający pingback.ping [6]200 z listą bez pingbackubrak odbicia, logowanie działa
Żądanie GET zamiast POST [3]405 z Allow: POSTwynik bez znaczenia dla stanu interfejsu
Plik zablokowany przez hosting lub wtyczkę [10]odmowa dostępuJetpack i aplikacja mobilna tracą połączenie [9]
WordPress przed 3.5.1 [7]200 z pingback.pingSSRF do sieci wewnętrznej
TAB. 1.1Przypisy10
  1. [1] XML-RPC WordPress API · WordPress.org
  2. [2] Hook xmlrpc_enabled — Code Reference · WordPress.org
  3. [3] class-IXR-server.php — serwer XML-RPC w kodzie WordPressa · WordPress
  4. [4] class-wp-xmlrpc-server.php — metody XML-RPC WordPressa · WordPress
  5. [5] Brute Force Amplification Attacks Against WordPress XMLRPC · Sucuri
  6. [6] More Than 162,000 WordPress Sites Used for Distributed Denial of Service Attack · Sucuri
  7. [7] CVE-2013-0235 — rekord NVD · NIST NVD
  8. [8] CVE-2022-3590 — rekord NVD · NIST NVD
  9. [9] Jetpack and XML-RPC · Jetpack
  10. [10] Inaccessible XML-RPC Connection error · WordPress.com Apps
ARK. 2

STATS

wyniki z systemu · tylko liczby zbiorcze
TAB. 2.1Odczyty per strona

Ten parametr nie zapisuje odczytu per strona — przebieg zostawia tylko ustalenia, więc liczby sprawdzonych stron i wyników „ok” system nie ma. Pojawią się po wdrożeniu zapisu przebiegów per strona per parametr.

TAB. 2.3Ustaleniaod 09.09.2026
Otwarte teraz
5stron: 5
Nowe w ostatnim dniu
509.09.2026
Otwarte od początku
5stron: 5
Zamknięte
0od początku
Mediana trwania
od wykrycia do zamknięcia
UstalenieSkutekOtwarte terazŁącznieZamknięte
Otwarty xmlrpc.php exposure_xmlrpcPODATNA550
RYS. 2.2Nowe ustalenia, 30 dni
23.08.202607.09.202621.09.2026
Nowe ustalenia parametru Dostępność xmlrpc.php, 30 dni · wysokość słupka = liczba ustaleń dnia, warstwy od dołu: nowe ustalenia · dni bez odczytu: 29
Nowe ustalenia parametru Dostępność xmlrpc.php, 30 dni
Dzieńnowe ustalenia
23.08.20260 ustaleń
24.08.20260 ustaleń
25.08.20260 ustaleń
26.08.20260 ustaleń
27.08.20260 ustaleń
28.08.20260 ustaleń
29.08.20260 ustaleń
30.08.20260 ustaleń
31.08.20260 ustaleń
01.09.20260 ustaleń
02.09.20260 ustaleń
03.09.20260 ustaleń
04.09.20260 ustaleń
05.09.20260 ustaleń
06.09.20260 ustaleń
07.09.20260 ustaleń
08.09.20260 ustaleń
09.09.20265 ustaleń
10.09.20260 ustaleń
11.09.20260 ustaleń
12.09.20260 ustaleń
13.09.20260 ustaleń
14.09.20260 ustaleń
15.09.20260 ustaleń
16.09.20260 ustaleń
17.09.20260 ustaleń
18.09.20260 ustaleń
19.09.20260 ustaleń
20.09.20260 ustaleń
21.09.20260 ustaleń
TAB. 2.4Przebiegi z tym sposobem sprawdzeniaod 09.09.2026
Przebiegów
33sposób exposure
W 30 dni
33przebiegów
Ostatni
19.09.2026start przebiegu
Stron w przebiegach
33 przebiegów bez liczby stron
ARK. 3

CARD

karta z kodu CREATO_PING, odczyt 16.09.2026
RYS. 3.1Droga parametru przez system: Dostępność xmlrpc.php
TAB. 3.1Pomiarpliki: 5
Obszar i ważnośćBezpieczeństwo · wysoka (B10)
Workflow i częstotliwośćcreato_ping_security_v2 · P3 działa na LAB247cron co 24 h, T1–T3; T4 raz po anomalii · Dokładny skan. dns_integrity porównuje NS, MX, SPF i DMARC z wzorcem z poprzedniego przebiegu.
Sonda i helpersposób exposure · CREATO_PING/helpers/exposure_check.py
Testy
  1. Tylko przebieg P3; przed sondami strażnik losowej ścieżki (200 z treścią = sondy pominięte).
  2. POST https://domena/xmlrpc.php z wywołaniem system.listMethods, bez podążania za przekierowaniami; oceniane pierwsze 5000 znaków.
  3. Reguła: kod 200, w treści methodResponse, brak kodu błędu -32601 i choć jedna metoda system. albo wp.
  4. Dowód wymienia, które z metod system.multicall, pingback.ping i wp.getUsersBlogs są na liście.
Typ wyniku0 albo 1 ustalenie exposure_xmlrpc
Jednostkabrak — wynik jakościowy; w dowodzie groźne metody z listy
Próg i regułaTimeout odpowiedzi 15 s, połączenia 5 s. 403, 404, 405, przekierowanie, błąd sieci i timeout = brak ustalenia.
Gdzie leżą pokrętłaCREATO_PING/helpers/exposure_check.py → PROBES (reguła xmlrpc_methods), _XMLRPC_LIST_METHODS, _XMLRPC_DANGEROUSCREATO_PING/helpers/config.py → TIMEOUTS["exposure"], TIMEOUTS["security_connect"]CREATO_PING/helpers/security_runner.py → _TASK_SEVERITIESCREATO_PING/config/incident_policy.toml → [finding] exposure_xmlrpc
Retencja odczytówOdczytu per strona nie zapisujemy — zostaje tylko ustalenie w tabeli findings (otwarcie, zamknięcie, dowód). Replay po surowych odczytach dziś niemożliwy.
Znane rozbieżności
  1. Metoda system.listMethods nie wymaga logowania, więc strona z wyłączonym logowaniem przez XML-RPC (xmlrpc_enabled=false) daje to samo ustalenie co w pełni otwarty interfejs.
  2. Metody system. dokłada każdy serwer XML-RPC, więc warunek „system. albo wp.” jest zawsze spełniony — także gdy wtyczka usunęła wszystkie metody WordPressa.
  3. Dowód nazywa system.multicall wzmacniaczem ataku siłowego, a rdzeń WordPressa od 2015 roku po pierwszym nieudanym logowaniu w żądaniu odrzuca kolejne próby; realne zostają pojedyncze próby haseł i odbicie ruchu przez pingback.
  4. wp.getUsersBlogs jest na końcu listy i przy wielu metodach wtyczek może wypaść poza oceniane 5000 znaków.
  5. alert w polityce nie jest czytany, brak trzeciego stanu i brak sygnału zamknięcia — wspólne dla sond ekspozycji.
kandydaci do pętli: kod a opis parametru albo specyfikacja
Karta przepisana zCREATO_PING/helpers/exposure_check.py · CREATO_PING/helpers/config.py · CREATO_PING/config/incident_policy.toml · CREATO_PING/helpers/security_runner.py · CREATO_PING/helpers/clickup_writer_v2.py · odczyt 16.09.2026
TAB. 3.2Co oznacza failtypów ustaleń: 1

Powaga wysoka w helperze i w polityce, pewność ewidentna, skutek PODATNA — subtask z priorytetem wysokim, status strony przeliczony na PODATNA. Kolejne przebiegi odświeżają opis i datę.

UstaleniePowagaPewnośćSkutekSubtask / alarmCo zrobić
Otwarty xmlrpc.phpexposure_xmlrpcWysokieEwidentnePODATNAtak / nieZablokuj xmlrpc.php, jeśli nie używasz aplikacji mobilnej lub Jetpacka.
ARK. 4

LOOP

pętli: 3
RYS. 4.1Pętla parametru — sześć etapów
TAB. 4.1Trafność, 30 dnialarmy · prawdziwe · fałszywe · bez rozstrzygnięcia

Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.

TAB. 4.2Pętle3 · zmian: 4 · wpływających na cały system: 3
Strażnik losowej ścieżki i dłuższy limit czasu dla sond ekspozycjizamknięta historyczna 2026-09-05

Sygnał: Tarcze antybotowe hostingu, strony parkingowe i serwery catch-all odpowiadają 200 na każdą ścieżkę, więc sondy oparte na kodzie 200 dawały „wystawiony” wszędzie. Równocześnie sondy na wolnych hostingach odpowiadały po około 15 s, a limit 5 s ucinał je bez śladu. · dotyczy też: Ekspozycja .env, Ekspozycja plików wrażliwych, Ekspozycja .htaccess.bak, REST API: enumeracja użytkowników, Ekspozycja .git/HEAD, Dostępność readme.html, Dostępność wp-cron.php, Ekspozycja kopii zapasowych, Ekspozycja zrzutu bazy, Ekspozycja manifestów dev, Ekspozycja .DS_Store

  1. 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
  2. 2. Werdyktręcznieprzegląd skanera: 200 na wszystko i ciche timeouty to fałszywe wyniki
  3. 3. Miarabrakliczników trafności wtedy nie było
  4. 4. Kartabrakkarta parametru powstała 2026-09-16
  5. 5. Zmianazrobionestrażnik ścieżki, 15 s, logowanie błędów
  6. 6. Replaybrakbrak zapisanych odczytów do replayu
DataZmianaPowódWpływ na systemCommit · replay
2026-09-05Przed sondami GET losowej, nieistniejącej ścieżki; odpowiedź 200 z treścią = zero sond i jedno ustalenie exposure_scan_unreliable (niska powaga, bez subtaska).helpers/exposure_check.py · config/incident_policy.tomlOdpowiedź 200 na losową ścieżkę dowodzi, że kod 200 na tym serwerze nic nie znaczy; dalsze sondowanie tarczy grozi banem IP monitoringu.cały system Obejmuje wszystkie sondy ekspozycji naraz i wprowadza typ „nie dało się sprawdzić”; tę samą konwencję dostało wykrywanie wtyczek. Ustalenie ma niską powagę, więc filtr przebiegu je odrzuca i w produkcji nie zostawia śladu.b0fc77cbez replayubez zapisu zatwierdzenia
2026-09-05Limit odpowiedzi z 5 s na 15 s i połączenia z 2 s na 5 s, przeniesione do config.py; błąd sieci sondy logowany zamiast cichego pustego wyniku; do 4 sond naraz na stronę.helpers/config.py · helpers/exposure_check.py · helpers/html_fetch.py · helpers/wp_fingerprint.pyWolne hostingi odpowiadały po około 15 s, a pusty wynik po timeoucie był nieodróżnialny od „sprawdzone, czysto”.cały system Limit połączenia 5 s przejęło wspólne pobieranie HTML całego skanu bezpieczeństwa i wykrywanie wersji — strony z wolnym TLS przestały wypadać z całego skanu.b0fc77cbez replayubez zapisu zatwierdzenia
Limit 64 KB czytanej odpowiedzi po awarii pamięcizamknięta historyczna 2026-07-19

Sygnał: Brak pamięci podczas skanu: publiczny debug.log jednej ze stron był bardzo duży, a klient HTTP buforował całą odpowiedź. · dotyczy też: Sitemap.xml, Ekspozycja plików wrażliwych, Ekspozycja .env, Ekspozycja .htaccess.bak, REST API: enumeracja użytkowników, Ekspozycja .git/HEAD, Dostępność readme.html, Dostępność wp-cron.php, Ekspozycja kopii zapasowych, Ekspozycja zrzutu bazy, Ekspozycja manifestów dev, Ekspozycja .DS_Store

  1. 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
  2. 2. Werdyktręcznieawaria procesu przypisana ścieżce debug.log
  3. 3. Miarabrakliczników trafności wtedy nie było
  4. 4. Kartabrakkarta parametru powstała 2026-09-16
  5. 5. Zmianazrobionestrumień z limitem 64 KB
  6. 6. Replaybrakbrak zapisanych odczytów do replayu
DataZmianaPowódWpływ na systemCommit · replay
2026-07-19Odpowiedź sondy czytana strumieniem do 64 KB; do oceny idzie pierwsze 5000 znaków.helpers/exposure_check.py · helpers/html_fetch.py · helpers/sitemap_check.pyDo rozpoznania ekspozycji wystarcza początek pliku; zmiana dotyczy sposobu czytania, nie werdyktu.cały system Brak pamięci w helperze zatrzymywał cały proces skanu bezpieczeństwa partii stron; ten sam limit dostało sprawdzenie sitemap.343b699bez replayubez zapisu zatwierdzenia
xmlrpc.php sprawdzany żądaniem POST, nie GETzamknięta historyczna 2026-08-27 → 2026-09-05

Sygnał: Audyt AI strony klienta znalazł otwarty xmlrpc.php (POST zwracał listę metod z system.multicall i pingback.ping), którego sonda nie widziała: na GET xmlrpc.php odpowiada 405, a reguła wymagała 200.

  1. 1. Zbiórkaręcznieaudyt AI jednej strony, nie nocny skan
  2. 2. Werdyktręcznieaudyt AI potwierdził otwarty endpoint żądaniem POST
  3. 3. Miarabrakliczników trafności wtedy nie było
  4. 4. Kartabrakkarta parametru powstała 2026-09-16
  5. 5. Zmianazrobionesonda POST system.listMethods
  6. 6. Replaybrakbrak zapisanych odczytów do replayu
DataZmianaPowódWpływ na systemCommit · replay
2026-09-05POST /xmlrpc.php z system.listMethods; ustalenie przy kodzie 200, odpowiedzi methodResponse bez błędu -32601 i metodach system. albo wp.; w dowodzie groźne metody.helpers/exposure_check.pyGET dostaje 405 także przy otwartym xmlrpc; nadużycia (multicall, pingback) idą wyłącznie przez POST.tylko ten parametrb0fc77cbez replayubez zapisu zatwierdzenia
Blog 24/7
20.09Zastrzeżony PESEL: zmiana raz na 30 minut, blokada przy wypłaciedobreprogramy.pl20.09Fałszywe SMS-y od GITD o mandacie za autostradę wyłudzają dane kartyinstalki.pl20.09Pakiet npm indexed-btree omija blokadę skryptów instalacyjnychbleepingcomputer.com19.09SolarWinds łata CVE-2026-28326 w Access Rights Manager, zdalny kod bez logowaniathehackernews.com19.09Orkes Conductor: luka CVE-2026-58138 atakowana w sieci, poprawka w wersji 3.30.2thehackernews.com19.09Trzy luki jądra Linux w katalogu CISA KEV, Red Hat potwierdza aktywne atakithehackernews.com18.09Publiczne exploity na cztery luki jądra Linux dają lokalnie uprawnienia rootthehackernews.com18.09Brevo: skradziony klucz API Cloudflare i skrypty ClickFix na stronach klientówbleepingcomputer.com18.09WaterPlum z Korei Północnej zainfekowała 30 000 urządzeń w 100 krajachtherecord.media18.09Jedna zgoda OAuth daje napastnikowi dostęp do poczty i plików mimo MFAdarkreading.com