Oracle mySQL – Critical Patch Update – Januar 2016

Oracle hatte für seine Produktpalette am 10. November 2015 einen Security Alert veröffentlicht. => Security Alert for CVE-2015-4852, darauf basierend wurde nun auch ein bzw mehrere Critical Patch Updates als CPU Januar 2016 veröffentlicht, welche dringend empfohlen werden zu installieren. Mit diesem Januar Critical Patch Update werden insgesamt 248 “Schwachstellen” in der Oracle Produktfamilie bereinigt, mehr Details zum Inhalt dieses Critical Patch Updates und anderen Oracle Security Aktivitäten findet man im entsprechenden Oracle Blogbeitrag auf https://blogs.oracle.com/security.

Die Oracle Database Produkte sind ebenso betroffen und es wird dringend empfohlen diese zu aktualisieren. Mehr Informationen zu dem Oracle Database CPU finden Sie hier.

Da mein Schwerpunkt neben dem Microsoft SQL Server eben auch auf dem mySQL Datenbank Server liegt, gibt es hier auch mehr Informationen rund um das Critical Patch Update für die folgenden MySQL-Versionen.

vom Critical Patch Update betroffene mySQL Versionen

  • 5.5.46 und älter
  • 5.6.27 und älter
  • 5.7.9

Dieses Critical Patch Update enthält 22 neue Security Fixes für die Oracle mySQL Datenbank Engine. Es handelt sich um viele Schwachstellen meist mittleren Schweregrads (max. 7.2).
Da eine dieser Sicherheits-Lücken sich über das Netzwerk ohne Authentifizierung ausnutzen lässt, das heißt man kann über das Netzwerk ohne Notwendigkeit eines Benutzernamen und/oder Kennwort den mySQL Server nutzen bzw an dessen Daten gelangen, besteht dringender Handlungsbedarf.

Derzeit sind folgende MySQL-Versionen (Enterprise Edition) supportet:

(http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf)

mySQL Release Veröffentlicht Premium Support Extended Support Support-Ende
mySQL Database 5.5 Dezember 2010 Dezember 2015 Dezember 2018 Unbestimmt
mySQL Database 5.6 Februar 2013 Februar 2018 Februar 2021 Unbestimmt
mySQL Database 5.7 Oktober 2015 Oktober 2020 Oktober 2023 Unbestimmt

Tragen Sie jetzt dazu bei, dass Ihre mySQL Server bzw Datenbanken sicher und auf einem aktuellen Patch-Level sind.
Ihre Applikationsbetreuer und Kunden werden es Ihnen danken !

mySQL - Make it safer - Critical Patch Update - Januar 2016

Oracle MySQL Risk Matrix

CVE# Component Protocol Sub-
component
Remote Exploit without Auth.? CVSS VERSION 2.0 RISK (see Risk Matrix Definitions) Supported Versions Affected Notes
Base Score Access Vector Access Complexity Authen-
tication
Confiden-
tiality
Integrity Avail-
ability
CVE-2016-0546 MySQL Server None Client No 7.2 Local Low None Complete Complete Complete 5.5.46 and earlier, 5.6.27 and earlier, 5.7.9 See Note 1
CVE-2016-0504 MySQL Server MySQL Protocol Server: DML No 6.8 Network Low Single None None Complete 5.6.27 and earlier, 5.7.9
CVE-2016-0505 MySQL Server MySQL Protocol Server: Options No 6.8 Network Low Single None None Complete 5.5.46 and earlier, 5.6.27 and earlier, 5.7.9
CVE-2016-0594 MySQL Server MySQL Protocol Server: DML No 4.0 Network Low Single None None Partial+ 5.6.21 and earlier
CVE-2016-0595 MySQL Server MySQL Protocol Server: DML No 4.0 Network Low Single None None Partial+ 5.6.27 and earlier
CVE-2016-0503 MySQL Server MySQL Protocol Server: DML No 4.0 Network Low Single None None Partial+ 5.6.27 and earlier, 5.7.9
CVE-2016-0596 MySQL Server MySQL Protocol Server: DML No 4.0 Network Low Single None None Partial+ 5.5.46 and earlier, 5.6.27 and earlier
CVE-2016-0502 MySQL Server MySQL Protocol Server: Optimizer No 4.0 Network Low Single None None Partial+ 5.5.31 and earlier, 5.6.11 and earlier
CVE-2016-0597 MySQL Server MySQL Protocol Server: Optimizer No 4.0 Network Low Single None None Partial+ 5.5.46 and earlier, 5.6.27 and earlier, 5.7.9
CVE-2016-0611 MySQL Server MySQL Protocol Server: Optimizer No 4.0 Network Low Single None None Partial+ 5.6.27 and earlier, 5.7.9
CVE-2016-0616 MySQL Server MySQL Protocol Server: Optimizer No 4.0 Network Low Single None None Partial+ 5.5.46 and earlier
CVE-2016-0598 MySQL Server MySQL Protocol Server: DML No 3.5 Network Medium Single None None Partial+ 5.5.46 and earlier, 5.6.27 and earlier,
5.7.9
CVE-2016-0600 MySQL Server MySQL Protocol Server: InnoDB No 3.5 Network Medium Single None None Partial 5.5.46 and earlier, 5.6.27 and earlier,
5.7.9
CVE-2016-0610 MySQL Server MySQL Protocol Server: InnoDB No 3.5 Network Medium Single None None Partial+ 5.6.27 and earlier
CVE-2016-0599 MySQL Server MySQL Protocol Server: Optimizer No 3.5 Network Medium Single None None Partial+ 5.7.9
CVE-2016-0601 MySQL Server MySQL Protocol Server: Partition No 3.5 Network Medium Single None None Partial+ 5.7.9
CVE-2016-0606 MySQL Server MySQL Protocol Server: Security: Encryption No 3.5 Network Medium Single None Partial None 5.5.46 and earlier, 5.6.27 and earlier,
5.7.9
CVE-2016-0608 MySQL Server MySQL Protocol Server: UDF No 3.5 Network Medium Single None None Partial+ 5.5.46 and earlier, 5.6.27 and earlier,
5.7.9
CVE-2016-0607 MySQL Server MySQL Protocol Server: Replication No 2.8 Network Medium Multiple None None Partial+ 5.6.27 and earlier, 5.7.9
CVE-2015-7744 MySQL Server MySQL Protocol Server: Security: Encryption Yes 2.6 Network High None Partial None None 5.5.45 and earlier, 5.6.26 and earlier
CVE-2016-0605 MySQL Server MySQL Protocol Server: General No 2.1 Network High Single None None Partial+ 5.6.26 and earlier
CVE-2016-0609 MySQL Server MySQL Protocol Server: Security: Privileges No 1.7 Network High Multiple None None Partial+ 5.5.46 and earlier, 5.6.27 and earlier,
5.7.9

Noch weitere Details zu diesem Oracle mySQL Critical Patch Update Advisory – January 2016:

http://www.oracle.com/technetwork/topics/security/cpujan2016-2367955.html#AppendixMSQL

 

Ein Blick in die von uns betriebenen mySQL Datenbank Server Übersicht zeigte auch noch ältere im Einsatz befindliche mySQL Server Versionen, so dass ich auch noch mal den Hinweis hier bzw an meine Kunden weitergeben werde, das hier dringender Handlungsbedarf besteht, denn die mySQL Server Versionen kleiner 5.5 werden nicht mehr offiziell unterstützt.

Nun wünsche ich euch viel Spaß und Vergnügen bei der Rollout-Planung für das Oracle Critical Patch Update Januar 2016. 😉

 

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.

Welcher SQL Benutzer darf was auf meine SQL Server – Rollen-/Rechte Analyse

Mal wieder eine Anfrage von unseren Kunden-Betreuern erhalten, wir sollen mal wieder eine Auswertung liefern…

Es gibt Situationen in denen wir oder auch der Kunde gerne eine Übersicht über alle eingerichteten SQL Benutzer und deren Berechtigungen auf einem SQL Server wünscht bzw wir bei der Übernahme von neuen Servern nicht nur auf die Skripte von Brent Ozar zurück greifen und die obige Anfrage des öfteren kommt, haben wir uns ein entsprechenden Statement gebaut.

Anforderung:

  • alle eingerichteten SQL Benutzer sollen gelistet werden (keine Systemuser)
  • Zuordnung soll ersichtlich sein (SQL Benutzer, Windows User oder Windows Gruppe)
  • Welcher Serverrolle wurde dem jeweiligen User zugeteilt?
  • Wann wurde der Account anlegt bzw das letzte mal aktualisiert?

Für solche Auswertungen eignen sich die systemeigenen DMVs wunderbar, in diesem Fall sind es die Views:

  • sys.server_principals
  • sys.syslogins

Die Auswahl der sinnvoll darstellbaren Spalten in der Auswertung – damit der Kunde und der Kundenbetreuer es auch “versteht” – und eine sprechende Benamung der einzelnen Spalten ergeben dann das folgende Skript. (ich habe das Rad nicht neu erfunden, nur für mich erweitert 😉 )

USE master
GO
 
SELECT  p.name AS [loginname] ,
        p.type_desc ,
        p.is_disabled,
        s.sysadmin as IsSysAdmin ,
        s.serveradmin as IsServerAdmin,
        s.securityadmin as IsSecurityAdmin ,
        s.processadmin as IsProcessAdmin,
        s.setupadmin as IsSetupAdmin,
        s.bulkadmin as IsBulkAdmin,
        s.diskadmin as IsDiskAdmin,
        s.dbcreator as IsDBCreator,
        CONVERT(VARCHAR(10),p.create_date ,101) AS [created],
        CONVERT(VARCHAR(10),p.modify_date , 101) AS [update]
FROM    sys.server_principals p
        JOIN sys.syslogins s ON p.sid = s.sid
WHERE   p.type_desc IN ('SQL_LOGIN', 'WINDOWS_LOGIN', 'WINDOWS_GROUP')
        -- Logins that are not process logins
        AND p.name NOT LIKE '##%'
        and p.name not like 'xyz\accountname' -- put your admin-accounts in here

Das TSQL Statement filtert das Resultset nach reinen SQL Benutzern und Windows-Usern sowie Windows Gruppen (sowohl lokalen als auch Domänen), mittels der Einschränkung ‘##%’ grenzen wir auch (für diese Auswertung) relevante System-Benutzer aus.
Da allen Empfängern dieser Auswertung bewußt ist, dass wir als DBAs immer volle Rechte (sysadmin-Rolle) haben, filtern wir diese Benutzer(oder Benutzergruppen) heraus => and p.name not like ‘xyz\accountname’

Als Ergebnis erhalten wir dann folgende Tabelle, die uns übersichtlich darstellt, welcher Account über welche Rolle verfügt:

loginname type_desc is_disabled IsSysAdmin IsServerAdmin IsSecurityAdmin IsProcessAdmin IsSetupAdmin IsBulkAdmin IsDiskAdmin IsDBCreator created update
sa SQL_LOGIN 0 1 0 0 0 0 0 0 0 04.08.2003 10.08.2013
NT SERVICE\SQLWriter WINDOWS_LOGIN 0 1 0 0 0 0 0 0 0 10.09.2012 10.09.2012
NT SERVICE\Winmgmt WINDOWS_LOGIN 0 1 0 0 0 0 0 0 0 10.09.2012 10.09.2012
NT SERVICE\MSSQLSERVER WINDOWS_LOGIN 0 1 0 0 0 0 0 0 0 10.09.2012 10.09.2012
NT SERVICE\ClusSvc WINDOWS_LOGIN 0 0 0 0 0 0 0 0 0 10.09.2012 10.09.2012
NT AUTHORITY\SYSTEM WINDOWS_LOGIN 0 0 0 0 0 0 0 0 0 10.09.2012 10.09.2012
NT SERVICE\SQLSERVERAGENT WINDOWS_LOGIN 0 1 0 0 0 0 0 0 0 10.09.2012 10.09.2012
EP\sql_serv WINDOWS_LOGIN 0 1 0 0 0 0 0 0 0 10.09.2012 10.09.2012
Attunity SQL_LOGIN 0 0 0 0 0 0 0 0 0 10/16/2012 12/23/2012
BackupHist SQL_LOGIN 0 0 0 0 0 0 0 0 0 11/15/2013 11/15/2013
domain\accountname WINDOWS_LOGIN 0 1 0 0 0 0 0 0 0 11/15/2013 11/15/2013
domain\groupname WINDOWS_GROUP 0 1 0 0 0 0 0 0 0 11/15/2013 11/15/2013

Wenn man diese Tabelle nun in ein Excel-Sheet kopiert, kann man die relevanten Zeilen optisch besser markieren, so dass die Empfänger schneller und einfacher eine Übersicht erhalten.
Gemäß unserer Security Baselines darf eine Kunden-User maximal die Server-Rolle “dbcreator” haben, daher könnte man die SQL Benutzer oder Gruppen farbig (rot) markieren, wenn diese über zuviele Rechte verfügen. Oder wenn man erkennt, dass der SQL Benutzer “sa” nicht wie empfohlen disabled wurde.

Nun kann man die Auswertung entweder einfach als Anhang oder per Copy/Paste in eine Mail einfügen und den jeweiligen Empfängern zur Verfügung stellen.

Wer diese Auswertung ggfs in regelmäßigem Abständen haben will, kann sich dies auch als SQL Agent Job hinbauen, Ausgabe der Tabelle als HTML Konstrukt und den HTML-Output gleich per SQLMail versenden.

Hinweise, wie man solche Mails bzw Jobs erstellt und entsprechend formatiert, findet man im SQLServerCentral unter: http://www.sqlservercentral.com/articles/T-SQL/99398/

Björn arbeitet in Hamburg als Datenbank-Administrator und Head of Competence für MS SQL und mySQL. Er nimmt regelmäßig an den PASS Regionalgruppen Treffen in Hamburg, den Veranstaltungen der PASS wie SQLSaturday und SQLGrillen teil und er organisiert in Hamburg das Azure Meetup. Er interessiert sich neben den Themen rund um den SQL Server, Powershell und Azure für Science-Fiction, Snowboarden, Backen 😉 und Radfahren.