XenForo 2.2.17 Released (Security Fix)

РЕЛИЗ xF2 XenForo 2.2.17 Released (Security Fix) 2.2.17

XenForo 2.2.17 Released (Security Fix)
Видимый копирайт
Да
Выпуск XenForo 2.2.17 для устранения потенциальной уязвимости в системе безопасности. Мы рекомендуем всем пользователям XenForo 2.2 обновить программу до версии 2.2.17 или как можно скорее воспользоваться приведёнными ниже инструкциями по установке обновления.

У вас недостаточно прав для просмотра содержимого
Проблема связана с потенциальным эксплойтом перенаправления с использованием специально созданного URL-адреса.

Для устранения проблем мы рекомендуем выполнить полное обновление, но исправление можно применить вручную. Дополнительные сведения см. ниже.

Нанесение патча вручную​


Способ 1: ручное редактирование файла​

Чтобы применить исправление в этом случае, необходимо изменить одну функцию в определённом файле. Для этого найдите файл src/XF/App.php и найдите начало этой конкретной функции:

PHP:
    public function getDynamicRedirect($fallbackUrl = null, $useReferrer = true)

Найдите конец функции, которая в данный момент выглядит следующим образом:

PHP:
        return $fallbackUrl;
    }

Удалите весь этот блок кода и замените следующим:

PHP:
    public function getDynamicRedirect($fallbackUrl = null, $useReferrer = true)
    {
        if ($fallbackUrl === null)
        {
            $fallbackUrl = $this->router()->buildLink('index');
        }

        $request = $this->request();
        $fallbackUrl = $request->convertToAbsoluteUri($fallbackUrl);

        $redirect = $request->filter('_xfRedirect', 'str');
        if (!$redirect && $useReferrer)
        {
            $redirect = $request->getServer('HTTP_X_AJAX_REFERER')
                ?: $request->getReferrer();
        }

        if (!$redirect || !preg_match('/./su', $redirect))
        {
            // no redirect provided
            return $fallbackUrl;
        }

        if (
            strpos($redirect, "\n") !== false ||
            strpos($redirect, "\r") !== false ||
            strpos($redirect, '@') !== false
        )
        {
            // redirect contained newlines or user/pass
            return $fallbackUrl;
        }

        $fullRedirect = $request->convertToAbsoluteUri($redirect);
        $redirectParts = @parse_url($fullRedirect);
        $redirectHost = $redirectParts['host'] ?? null;
        if (!$redirectHost)
        {
            // no redirect host
            return $fallbackUrl;
        }

        $requestParts = @parse_url($request->getFullBasePath());
        $requestHost = $requestParts['host'] ?? null;
        if ($redirectHost !== $requestHost)
        {
            // redirect host did not match request host
            return $fallbackUrl;
        }

        return $fullRedirect;
    }

Способ 2: нанесение патча / дополнения​

Вы можете применить следующий патч, чтобы автоматически исправить файл:

Diff:
Index: src/XF/App.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/XF/App.php b/src/XF/App.php
--- a/src/XF/App.php    (revision 7f4538e8ad4a572dcff3e0416b56906ec84a53eb)
+++ b/src/XF/App.php    (revision 5a8b3ebd97eae9bc82d4f6aac5f17012d27b0043)
@@ -2305,50 +2305,85 @@
         return '__' . $hash;
     }
 
+    /**
+     * @param string|null $fallbackUrl
+     * @param bool $useReferrer
+     *
+     * @return string
+     */
     public function getDynamicRedirect($fallbackUrl = null, $useReferrer = true)
     {
+        if ($fallbackUrl === null)
+        {
+            $fallbackUrl = $this->router()->buildLink('index');
+        }
+
         $request = $this->request();
+        $fallbackUrl = $request->convertToAbsoluteUri($fallbackUrl);
 
         $redirect = $request->filter('_xfRedirect', 'str');
         if (!$redirect && $useReferrer)
         {
-            $redirect = $request->getServer('HTTP_X_AJAX_REFERER');
-            if (!$redirect)
-            {
-                $redirect = $request->getReferrer();
-            }
+            $redirect = $request->getServer('HTTP_X_AJAX_REFERER')
+                ?: $request->getReferrer();
+        }
+
+        if (!$redirect || !preg_match('/./su', $redirect))
+        {
+            // no redirect provided
+            return $fallbackUrl;
         }
 
-        if ($redirect && preg_match('/./su', $redirect))
+        if (
+            strpos($redirect, "\n") !== false ||
+            strpos($redirect, "\r") !== false ||
+            strpos($redirect, '@') !== false
+        )
         {
-            if (strpos($redirect, "\n") === false && strpos($redirect, "\r") === false)
-            {
-                $fullBasePath = $request->getFullBasePath();
+            // redirect contained newlines or user/pass
+            return $fallbackUrl;
+        }
 
-                $fullRedirect = $request->convertToAbsoluteUri($redirect);
-                $redirectParts = @parse_url($fullRedirect);
-                if ($redirectParts && !empty($redirectParts['host']))
-                {
-                    $pageParts = @parse_url($fullBasePath);
+        $fullRedirect = $request->convertToAbsoluteUri($redirect);
+        $redirectParts = @parse_url($fullRedirect);
+        $redirectHost = $redirectParts['host'] ?? null;
+        if (!$redirectHost)
+        {
+            // no redirect host
+            return $fallbackUrl;
+        }
 
-                    if ($pageParts && !empty($pageParts['host']) && $pageParts['host'] == $redirectParts['host'])
-                    {
-                        return $fullRedirect;
-                    }
-                }
-            }
-        }
+        $requestParts = @parse_url($request->getFullBasePath());
+        $requestHost = $requestParts['host'] ?? null;
+        if ($redirectHost !== $requestHost)
+        {
+            // redirect host did not match request host
+            return $fallbackUrl;
+        }
+
+        return $fullRedirect;
+    }
 
-        if ($fallbackUrl === null)
+    /**
+     * @param string $notUrl
+     * @param string|null $fallbackUrl
+     * @param bool $useReferrer
+     *
+     * @return string
+     */
+    public function getDynamicRedirectIfNot(
+        $notUrl,
+        $fallbackUrl = null,
+        $useReferrer = true
+    )
+    {
+        if ($fallbackUrl === false)
         {
             $fallbackUrl = $this->router()->buildLink('index');
         }
-        return $fallbackUrl;
-    }
 
-    public function getDynamicRedirectIfNot($notUrl, $fallbackUrl = null, $useReferrer = true)
-    {
         $request = $this->request();
+        $fallbackUrl = $request->convertToAbsoluteUri($fallbackUrl);
 
         $redirect = $this->getDynamicRedirect($fallbackUrl, $useReferrer);
         $notUrl = $request->convertToAbsoluteUri($notUrl);
@@ -2356,17 +2391,10 @@
         if (strpos($redirect, $notUrl) === 0)
         {
             // the URL we can't redirect to is at the start
-            if ($fallbackUrl === false)
-            {
-                $fallbackUrl = $this->router()->buildLink('index');
-            }
+            return $fallbackUrl;
+        }
 
-            return $request->convertToAbsoluteUri($fallbackUrl);
-        }
-        else
-        {
-            return $redirect;
-        }
+        return $redirect;
     }
 
     public function applyExternalDataUrl($externalPath, $canonical = false)

Примечание: если вы решите исправить файлы вместо полного обновления, то при «проверке целостности файлов» этот файл будет отмечен как «содержащий непредвиденное содержимое». Поскольку эти файлы больше не содержат того же содержимого, что и ваша версия XF, это ожидаемо и может быть безопасно проигнорировано.
Автор
xenforo2
Скачиваний
1
Просмотры
15
Первый выпуск
Обновление
Рейтинг
0,00 звёзд Оценок: 0
Нет прав для скачивания

Ещё ресурсы от xenforo2

Похожие ресурсы

XenForo 2.2.13 Released Upgrade Nulled НетМеня
0,00 звёзд Оценок: 0
Скачиваний
5
Обновлено
XenForo 2.3.0 Beta 3 Released (Unsupported) xenforo2
Форумный движок Форум Xenforo 2.3.0
0,00 звёзд Оценок: 0
Скачиваний
0
Обновлено
XenForo Released Nulled xenforo2
0,00 звёзд Оценок: 0
Скачиваний
1
Обновлено
XenForo 2.2.13 Release Edition Nulled НетМеня
0,00 звёзд Оценок: 0
Скачиваний
5
Обновлено
XenForo 2.2.14 Release Full xenforo2
0,00 звёзд Оценок: 0
Скачиваний
3
Обновлено
Назад
Верх Низ