NFsec Logo

MySQL – eskalacja uprawnień poprzez sytuację wyścigu

02/11/2016 w Bezpieczeństwo Brak komentarzy.

D

awid Golunski w formie. Serwer MySQL oraz jego odmiany (MariaDB, Percona) są podatne na eskalację uprawnień poprzez możliwość wygrania sytuacji wyścigu. Podatność pozwala lokalnemu użytkownikowi systemu na eskalację uprawnień i dowolne wykonanie kodu jako użytkownik bazy danych – najczęściej „mysql” – za pomocą dostępu zwykłego konta do bazy danych z podstawowymi uprawnieniami (CREATE/INSERT/SELECT). Eksploatacja zakończona sukcesem pozwala atakującemu na uzyskanie dostępu do wszystkich baz danych przechowywanych na podatnym serwerze. Wraz z połączeniem z innymi błędami może dojść nawet do pełnej kompromitacji systemu poprzez uzyskanie praw administratora. Wystarczy, że atakujący stworzy bazę danych w tymczasowym katalogu i wykona na niej operację REPAIR, która pozwoli mu na wygranie wyścigu przed operacją chmod(). W oknie atakujący może zamienić plik bazy danych na symlink do katalogu /var/lib/mysql. W ten sposób wcześniej ustawione prawa dostępu bazy np. 777 zostaną przeniesione na katalog, na który wskazuje symlink. Inne wykorzystanie tej luki umożliwia uzyskanie powłoki systemowej z uprawnieniami użytkownika, z którymi został uruchomiony serwer MySQL. Podatne są wersje:

MariaDB: 
	< 5.5.52
	< 10.1.18
        < 10.0.28
MySQL:
	<= 5.5.51
	<= 5.6.32
	<= 5.7.14
Percona Server:
	< 5.5.51-38.2
	< 5.6.32-78-1
	< 5.7.14-8
Percona XtraDB Cluster:
	< 5.6.32-25.17
	< 5.7.14-26.17
	< 5.5.41-37.0

Więcej informacji: PoC oraz Exploit wraz z szczegółowym opisem podatności

MySQL – Zdalne wykonanie kodu oraz eskalacja uprawnień

12/09/2016 w Bezpieczeństwo Brak komentarzy.

D

awid Glounski opublikował dzisiaj 0day na serwery bazodanowe oparte na silniku MySQL (dotyczy to również MariaDB oraz Percona). Błąd pozwala atakującym na wstrzyknięcie złośliwych ustawień do plików konfiguracyjnych serwera (my.cnf), które mogą prowadzić do poważnych konsekwencji. Podatność dotyka wszystkie serwery MySQL w podstawowej konfiguracji (wersje: 5.7, 5.6 oraz 5.5) wliczając w to najnowsze wersje. Eksploracja błędu może zostać przeprowadzona zarówno lokalnie, jak i zdanie (poprzez uwierzytelniony dostęp sieciowy / interfejs webowy w postaci PHPmyAdmin lub atak SQL Injection). Udane wykorzystanie luki może pozwolić agresorowi na wykonanie dowolnego kodu z uprawnieniami użytkownika root, czyli administratora – w konsekwencji może dojść do pełnej kompromitacji serwera, na którym został zaatakowany daemon MySQL, ponieważ wykorzystanie tej podatności jest możliwe nawet jeśli moduły zabezpieczeń w postaci AppArmor oraz SELinux są aktywowane z domyślnymi politykami dla różnych dystrybucji Linuksa.

Więcej informacji: Szczegóły ataku oraz dowód na słuszność koncepcji

Sprawdzanie ilości rekordów w tabeli przy pomocy information_schema

21/05/2013 w Administracja 1 komentarz.

J

eśli chcemy sprawdzić ilość rekordów w danej tabeli, a nie katować bazy (przy bardzo dużej ilości wpisów) kolejnym zapytaniem w stylu: select count(*) – możemy wykorzystać information_schema:

mysql> use information_schema;
mysql> select table_rows from tables where table_name = 'tabela';

Więcej informacji: INFORMATION_SCHEMA

Przewidywanie przestrzeni dyskowej dla bazy danych MySQL

22/08/2012 w Administracja 1 komentarz.

M

ożliwość obserwacji tendencji wzrostu danych jest bardzo ważnym elementem dalszego planowania pojemności przestrzeni dyskowej. Na przykład dla baz MySQL 5.0+ informacje o wielkości tabel wybranych baz danych są utrzymywane są w INFORMATION_SCHEMA. W celu ich analizy wystarczy stworzyć bazę danych stats, w której będziemy okresowo umieszczać interesujące nas informacje:
[ czytaj całość… ]

Logowanie do pliku sesji MySQL

03/08/2012 w Administracja Brak komentarzy.

W

jaki sposób zapisać przebieg sesji z interfejsu linii poleceń serwera MySQL do pliku? Wystarczy do tego celu wykorzystać polecenie tee:

mysql> tee /tmp/mysql_session
Logging to file '/tmp/mysql_session'
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables like '%slow%';
+--------------------------+
| Tables_in_mysql (%slow%) |
+--------------------------+
| slow_log                 |
+--------------------------+
1 row in set (0.00 sec)

mysql> quit;
Bye

[ czytaj całość… ]

MySQLdump dla replikacji przesłany na drugi host poprzez SSH

10/06/2012 w CmdLineFu Brak komentarzy.

MySQLdump z wykluczeniem kilku baz danych, przesyłany z kompresją przez SSH na 2’gi host:

mysql -u root -p$PASS -e 'show databases' | perl -ne 'print unless /\b(?:mysql|information_schema|Database)\b/' | xargs mysqldump -u root -p$PASS --master-data=2 --single-transaction -B | gzip -c | ssh login@2host.com 'cat > ~/mysql.sql.gz'

Operacje na logach (binarnych) lub upgrade MySQL podczas replikacji M-M

31/03/2012 w Administracja Brak komentarzy.

P

odczas operacji na ustawieniach związanych z logami binarnymi lub logowaniem zdarzeń (np. zmiana expire_logs_days, general_log, slow_query_log), czy podnoszenie wersji serwera MySQL, który jest wpięty w replikację Master – Master, należy liczyć się, że operacja ta może zakończyć się na drugim serwerze wypięciem replikacji i komunikatem błędu podobnym do tego:

Last_Errno: 1580
Last_Error: Error 'You cannot 'ALTER' a log table if logging is enabled' on query.
Default database: 'mysql'. Query: 'ALTER TABLE slow_log...

[ czytaj całość… ]

Percona Toolkit – pt-show-grants – klonowanie uprawnień między bazami

12/12/2011 w Administracja Brak komentarzy.

P

odczas przenoszenia całych baz danych MySQL np. na inne, szybsze i mocniejsze serwery – często występuje problem szybkiego przenoszenia uprawnień do tych baz. Z pomocą administratorom przychodzi Percona Toolkit (dawniej Maatkit), który w zestawie swoich narzędzi posiada m.in. program pt-show-grants. Załóżmy, że zrobiliśmy zrzut całego serwera MySQL i wgraliśmy go na inną maszynę. Jedyną rzeczą jaką pozostaje wykonać to sklonowanie uprawnień.
[ czytaj całość… ]

Ile miejsca zajmują tabele i bazy w MySQL?

26/09/2011 w Administracja 1 komentarz.

Z

nalezienie najwięcej zajmujących tabeli i baz w MySQL 5.0+ jest możliwe dzięki metadanym znajdującym się w tabeli INFORMATION_SCHEMA. Przechowuje ona informacje o wszystkich bazach danych, jakie serwer MySQL utrzymuje. Na przykład, aby znaleźć całkowitą liczbę tabel, wierszy oraz danych w indeksach dla danej instancji serwera MySQL wystarczy wydać polecenie:
[ czytaj całość… ]

MySQL – wyłączenie LOAD DATA LOCAL INFILE

07/06/2010 w Ataki Internetowe, Bezpieczeństwo Brak komentarzy.

W

yrażenie LOAD DATA LOCAL INFILE przy standardowej konfiguracji serwera MySQL potrafi wczytać do wcześniej spreparowanej tabeli dowolny plik z serwera posiadający globalne uprawnienia do odczytu. W celu skorzystania z tej możliwości wystarczy wskazać pełną ścieżkę do pliku, który musi znajdować się na tym samym serwerze, co oprogramowanie MySQL. Z powodzeniem wyrażenie to może zostać wykorzystane w jednej z technik SQL Injection (np. gdy w aplikacji webowej zostanie wykryta nowa luka) do odczytu wrażliwych z poziomu bezpieczeństwa plików konfiguracyjnych serwera i aplikacji lub wczytaniu plików konfiguracyjnych innych aplikacji na współdzielonym hostingu.
[ czytaj całość… ]

Strona 1 z 212