Выпуск OpenSSH 9.2 з ухіленнем уразлівасці, якая выяўляецца на этапе да аўтэнтыфікацыі

Апублікаваны рэліз OpenSSH 9.2, адкрытай рэалізацыі кліента і сервера для працы па пратаколах SSH 2.0 і SFTP. У новай версіі ўхіленая ўразлівасць, якая прыводзіць да падвойнага вызвалення вобласці памяці на стадыі да мінання аўтэнтыфікацыі. Уразлівасці схільны толькі выпуск OpenSSH 9.1, у больш ранніх версіях праблема не выяўляецца.

Для стварэння ўмоў праявы ўразлівасці досыць змяніць банэр SSH-кліента на "SSH-2.0-FuTTYSH_9.1p1" для таго, каб дамагчыся выстаўленні сцягоў "SSH_BUG_CURVE25519PAD" і "SSH_OLD_DHGEX", якія залежаць ад версіі SSH-клі. Пасля выстаўлення дадзеных сцягоў памяць пад буфер «options.kex_algorithms» вызваляецца два разы — пры выкананні функцыі do_ssh2_kex(), якая выклікае compat_kex_proposal(), і пры выкананні функцыі do_authentication2(), якая выклікае па ланцужку input_userauth_request(), , assemble_algorithms() і kex_assemble_names().

Стварэнне працоўнага эксплоіта для ўразлівасці лічыцца малаверагодным, бо працэс эксплуатацыі занадта ўскладнены - сучасныя бібліятэкі размеркавання памяці падаюць абарону ад падвойнага вызвалення памяці, а працэс pre-auth, у якім прысутнічае памылка, выконваецца з паніжанымі прывілеямі ў ізаляваным sandbox-акружэнні.

Акрамя адзначанай уразлівасці ў новым выпуску таксама ўхіленыя яшчэ дзве праблемы з бяспекай:

  • Памылка пры апрацоўцы налады "PermitRemoteOpen", якая прыводзіць да ігнаравання першага аргументу, калі ён адрозніваецца ад значэнняў "any" і "none". Праблема выяўляецца ў версіях навей OpenSSH 8.7 і прыводзіць да пропуску праверкі пры ўказанні толькі аднаго паўнамоцтва.
  • Атакуючы, які кантралюе DNS-сервер, выкарыстоўваны для вызначэння імёнаў, можа дамагчыся падстаноўкі спецзнакаў (напрыклад, «*») у файлы known_hosts, калі ў канфігурацыі ўключаны опцыі CanonicalizeHostname і CanonicalizePermittedCNAMEs, і сістэмны рэзавер не правярае карэктнасць адказаў. Правядзенне нападу разглядаецца як малаверагоднае, бо якія вяртаюцца імёны павінны адпавядаць умовам, зададзеным праз CanonicalizePermittedCNAMEs.

Іншыя змены:

  • У ssh_config для ssh дададзена налада EnableEscapeCommandline, якая кіруе ўключэннем апрацоўкі на боку кліента escape-паслядоўнасці «~C», якая прадстаўляе камандны радок. Па змаўчанні апрацоўка "~C" зараз адключаная для выкарыстання больш цвёрдай sandbox-ізаляцыі, што патэнцыйна можа прывесці да парушэння працы сістэм, у якіх "~C" выкарыстоўваецца для перанакіравання партоў падчас працы.
  • У sshd_config для sshd дададзена дырэктыва ChannelTimeout для задання таймаўту неактыўнасці канала (каналы, у якіх за паказаны ў дырэктыве час не зафіксаваны трафік, будуць аўтаматычна зачыненыя). Для сеансу, X11, агента і перанакіраванні трафіку могуць быць зададзены розныя таймаўты.
  • У sshd_config для sshd дададзена дырэктыва UnusedConnectionTimeout, якая дазваляе задаць таймаўт для завяршэння кліенцкіх злучэнняў, змешчаных вызначаны час без актыўных каналаў.
  • У sshd дададзена опцыя "-V" для вываду версіі па аналогіі з падобнай опцыяй у кліенце ssh.
  • У выснову «ssh -G» дададзены радок «Host», які адлюстроўвае значэнне аргумента з імем хаста.
  • У scp і sftp дададзена опцыя "-X" для кіравання такімі параметрамі пратаколу SFTP, як памер буфера капіявання і лік якія чакаюць завяршэння запытаў.
  • У ssh-keyscan дазволена сканаванне поўных CIDR-дыяпазонаў адрасоў, напрыклад, "ssh-keyscan 192.168.0.0/24".

Крыніца: opennet.ru

Дадаць каментар