Poważny błąd w kliencie OpenSSH

On 15 stycznia 2016 by puppetmaster

Puppet – na pomoc!

Publikacja informacji o poważnym błędzie bezpieczeństwa to czas, kiedy zdajemy sobie sprawę z tego jak dobre to rozwiązanie. Pomyślcie tylko: piątek i siedzenie do późnej nocy i patchowanie setek stacji, różnych systemów operacyjnych, gdzie na części z nich repozytoria pakietów nie działają – brrr… Ale nie musimy się martwić tego typu problemami, prawda?

Tym razem błąd w kliencie ssh umożliwia złośliwemu serwerowi, z którym się połączymy na odczyt części pamięci naszego komputera (m.in. możliwy jest wyciek kluczy prywatnych). Kod odpowiedzialny za błąd występuje w nieudokumentowanej funkcji, która nie jest wspierana na serwerze OpenSSH, ale pozostaje domyślnie włączona w każdym kliencie. Brzmi to dość źle.

Jeśli używamy Mcollective, możemy w prosty sposób na żywo zinwentaryzować naszą flotę pod kątem zagrożonej wersji OpenSSH:

# mco rpc package status package=openssh-clients

Jako wynik otrzymamy np.:

Discovering hosts using the mc method for 2 second(s) .... 3

 * [ ============================================================> ] 3 / 3

master
       Arch: x86_64
     Ensure: 6.4p1-8.el7
      Epoch: 0
       Name: openssh-clients
     Output: nil
   Provider: yum
    Release: 8.el7
    Version: 6.4p1

rhel6.vm
       Arch: x86_64
     Ensure: 5.3p1-104.el6
      Epoch: 0
       Name: openssh-clients
     Output: nil
   Provider: yum
    Release: 104.el6
    Version: 5.3p1

rhel7.vm
       Arch: x86_64
     Ensure: 6.4p1-8.el7
      Epoch: 0
       Name: openssh-clients
     Output: nil
   Provider: yum
    Release: 8.el7
    Version: 6.4p1

Summary of Arch:

   x86_64 = 3

Summary of Ensure:

     6.4p1-8.el7 = 2
   5.3p1-104.el6 = 1

Finished processing 3 / 3 hosts in 156.87 ms

Jeśli nie używamy Mcollective – nie musimy się martwić. Naszą poprawkę i tak zaaplikujemy globalnie, dla całego środowiska.

Wiemy, że podatna wersja to 5.4 do 7.1, a więc z powyższej listy 2 systemy są potencjalnie zagrożone.

Ponieważ dostawcy jeszcze mogli nie wydać wersji 7.1p2 najlepiej będzie jeśli zaaplikujemy wszędzie workaround.

W tym celu instalujemy odpowiedni moduł:

puppet module install herculesteam/augeasproviders_ssh

Oraz wprowadzamy do globalnego pliku konfiguracji ssh opcję wyłączającą wadliwie działający kod:

ssh_config { ‘UseRoaming’:

  ensure => present,

  value => ‘no’,

}

Teraz wystarczy uruchomić puppeta lub poczekać (typowo) 30 minut aby poprawka została rozdystrybuowana.

Jeśli pojawią się odpowiednie nowe pakiety możemy oczywiście zamienić ten kod na definicję podnoszącą wersję ssh, np.:


package { ‘openssh-clients’:

  ensure => ‘6.6.1p1-22’,

}

Odpowiednia wersja będzie oczywiście zależeć od wersji i rodzaju naszej dystrybucji.

To wszystko! Nasze systemy są już bezpieczne!

Post powstał na podstawie artykułu na blogu PuppetLabs: Using Puppet to address the new SSH client vulnerability. Więcej informacji o błędzie znajduje się na stronie OpenSSH oraz w CVE-2016-0777 i CVE-2016-0778.

Comments are closed.