Bản vá bảo mật SUPEE-11086 - Các vấn đề có thể xảy ra?


24

Magento đã phát hành một bản vá bảo mật mới cho M1 và các bản cập nhật cho M1 và M2.

Những bản phát hành này bao gồm các bản sửa lỗi bảo mật quan trọng. "Chúng tôi thực sự khuyên tất cả các thương nhân nên nâng cấp càng sớm càng tốt."

Những vấn đề tôi cần chú ý khi nâng cấp hoặc áp dụng bản vá này?

SUPEE-11086

SUPEE-11086, Magento Commerce 1.14.4.1 và Mã nguồn mở 1.9.4.1 chứa nhiều cải tiến bảo mật giúp đóng thực thi mã từ xa (RCE), tập lệnh chéo trang (XSS), giả mạo yêu cầu chéo trang (CSRF) và các lỗ hổng khác.

Cập nhật bảo mật Magento 2.3.1, 2.2.8 và 2.1.17

Các phiên bản này chứa nhiều cập nhật chức năng và bảo mật. Rủi ro: Quan trọng đối với Thương mại Magento và Nguồn mở Magento trước 2.1.17, 2.2.8 và 2.3.1.


Ryan Hoerr, tôi đoán rằng bạn phải tạo một câu hỏi khác cho Magento 2.3.1, 2.2.8 và 2.1.17 Cập nhật bảo mật
Amit Bera

2
Bất cứ ý tưởng tại sao không có phiên bản cho 1.8.0 / 1.8.1?
Jason

Câu trả lời:


20

Vấn đề lớn nhất, đã được tìm thấy: Mage::log()hoạt động không chính xác. Nếu bạn gọi hàm này bằng tệp nhật ký tùy chỉnh (và nó chưa tồn tại), nhật ký sẽ không được ghi vào tệp, vì xác thực bổ sung, được thêm vào trong SUPEE-11086.


Vấn đề này cũng áp dụng cho Magento CE 1.9.4.1: magento.stackexchange.com/questions/268229/ Kẻ
Aad Mathijssen

5
tất cả các bản ghi của tôi dừng lại hoàn toàn. Ngay cả Nhật ký hệ thống và ngoại lệ. có cách sửa nào cho nó không?
Kalvin Klien

tất cả các tệp nhật ký của tôi được ghi bởi Mage :: log cũng đã dừng. M1 EE 1.14.0.2
PromInc

Cách khắc phục duy nhất là trả lại mã củaMage::log()
Aswerer

3
Kể từ ngày 25 tháng 6, Magento đã phát hành SUPEE-11155, Magento Commerce 1.14.4.2 và Magento Open Source 1.9.4.2 bao gồm một bản sửa lỗi cho Mage::log()phương pháp.
Aad Mathijssen

11

Quan trọng: tên bản vá bao gồm phiên bản cao nhất mà bản vá áp dụng. Vì vậy, một bản vá cho 1.9.3.10 sẽ áp dụng cho 1.9.3.10, 1.9.3.9, .... xuống một bản vá khác. Chúng tôi sẽ cố gắng cải thiện việc đặt tên trong phiên bản tiếp theo và bạn cũng có thể sử dụng https://github.com/steverobbins/magedoad-cli vì nó sẽ thấy siêu dữ liệu phiên bản chính xác qua API.


5

Giống như những người khác, tôi đã có các tệp nhật ký hoàn toàn ngừng ghi dữ liệu.

Nguồn của lỗi - Đăng nhập tệp không ghi dữ liệu

Trong app/Mage.php họ đã thực hiện thay đổi này:

         // Validate file extension before save. Allowed file extensions: log, txt, html, csv
         -        if (!self::helper('log')->isLogFileExtensionValid($file)) {
         +        $_allowedFileExtensions = explode(
         +            ',',
         +            (string) self::getConfig()->getNode('dev/log/allowedFileExtensions', Mage_Core_Model_Store::DEFAULT_CODE)
         +        );
         +        $logValidator = new Zend_Validate_File_Extension($_allowedFileExtensions);
         +        $logDir = self::getBaseDir('var') . DS . 'log';
         +        if (!$logValidator->isValid($logDir . DS . $file)) {
                 return;
             }

đang tìm cấu hình cho danh sách các phần mở rộng tệp được phân tách bằng dấu phẩy. Tuy nhiên, họ KHÔNG thêm danh sách này vào cấu hình - thậm chí không phải là một tùy chọn trong Quản trị viên Mage để chúng tôi tự cấu hình danh sách này.

Giải pháp cho lỗi - Đăng nhập tệp không ghi dữ liệu

Để giải quyết điều này, chỉ cần thực hiện một mục vào cơ sở dữ liệu trong core_config_databảng.

INSERT INTO core_config_data VALUES ( NULL, 'default', 0, 'dev/log/allowedFileExtensions', 'log,txt,html,csv' );

Xóa bộ nhớ cache đối tượng là tốt và bạn sẽ thấy dữ liệu ghi vào tệp nhật ký một lần nữa.

ls -lrt var/log/ | tail


Để tham khảo, vấn đề này là trên EE 1.14.2.0 với tất cả các bản vá bảo mật được áp dụng.

Tôi đã mở một vé với Hỗ trợ Magento về vấn đề này nhưng chưa nhận được phản hồi từ kỹ thuật viên. Tôi đang xếp hàng.


Điều thực sự làm tôi bối rối về lỗi này là Magento đã có một phương pháp để xác thực các phần mở rộng tệp nhật ký mà họ đã thêm thông qua SUPEE-10415 vào cuối năm 2017.

app/code/core/Mage/Log/Helper/Data.php

    /**
     * Checking if file extensions is allowed. If passed then return true.
     *
     * @param $file
     * @return bool
     */
    public function isLogFileExtensionValid($file)
    {
        $result = false;
        $validatedFileExtension = pathinfo($file, PATHINFO_EXTENSION);
        if ($validatedFileExtension && in_array($validatedFileExtension, $this->_allowedFileExtensions)) {
            $result = true;
        }

        return $result;
    }

Tại sao họ không sử dụng lại logic đó thay vì cố gắng tái tạo không hoàn chỉnh bánh xe đăng nhập?


3
Điều này LAF không đúng. Trong app / etc / config.xml, allowFileExtensions đã được thêm vào dưới dạng cấu hình. Nếu nó không tồn tại trong cơ sở dữ liệu, nó sẽ được sử dụng. Vấn đề thực tế là chức năng xác nhận mới trước tiên cố gắng xem liệu tệp đã tồn tại chưa, mà nó có thể rất không được chào đón.
René Schep

Cảm ơn bạn đã chỉ ra rằng @ RenéSchep Tôi thấy sự thay đổi trong bản vá bây giờ. Nhìn sâu hơn, tệp config.xml của tôi nằm trong một kho lưu trữ khác như phần còn lại của cơ sở mã của chúng tôi. Vì lý do đó khi tôi đẩy thay đổi cho bản vá này, tệp cấu hình không được cập nhật với thay đổi này. Đối với việc không ghi vào các tệp không tồn tại, cá nhân tôi thấy rằng nó hoạt động trên các máy chủ của mình. Làm cho tôi tự hỏi nếu đây là một vấn đề quyền thư mục trên chính hệ thống tập tin. Tôi đã không nhìn quá sâu vào mã đó.
PromInc

Từ những gì tôi đã kiểm tra là nó hoạt động nếu tập tin đã tồn tại. Kiểm tra đầu tiên isValid là kiểm tra xem tập tin có thể đọc được không. Nếu nó không tồn tại, không có nỗ lực tạo tập tin và trả về false.
René Schep

@ RenéSchep vậy làm thế nào để chúng tôi sửa chữa nó? Hỗ trợ Magento là đau trong ** h. Họ rất chậm trong việc trả lời.
Adarsh ​​Khatri

@AdarshKhatri bạn cần tạo tệp trước khi Magento có thể ghi vào nó. chạm /path/to/magento/install/html/var/log/newlogfile.log
PromInc

4

Mage::log()không thể ghi bất cứ điều gì vào các tệp nhật ký nếu chúng không tồn tại ban đầu. Điều này là do isValidchức năng Zend_Validate_File_Extensionném lỗi không tìm thấy khi gọi Zend_Loader::isReadable($value). Tôi đã tạm thời khắc phục điều này bằng cách chuyển isValidsang thử / bắt sau khi tệp nhật ký thực sự được tạo và sau đó xóa tệp nếu xác thực không thành công:

<?php
final class Mage
{
    ...
    public static function log($message, $level = null, $file = '', $forceLog = false)
    {
        ...

        try {
            if (!isset($loggers[$file])) {
                $logFile = $logDir . DS . $file;

                if (!is_dir($logDir)) {
                    mkdir($logDir);
                    chmod($logDir, 0750);
                }

                if (!file_exists($logFile)) {
                    file_put_contents($logFile, '');
                    chmod($logFile, 0640);
                }

                if (!$logValidator->isValid($logFile)) {
                    unlink($logFile);

                    return;
                }

        ...
    }
}

Đây chắc chắn là một giải pháp tạm thời cho đến khi chúng ta có một cái gì đó vững chắc hơn một chút


3

Vấn đề có thể xảy ra với việc vá 1.9.3.10

checking file app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
Hunk #1 FAILED at 57.
1 out of 1 hunk FAILED

Trong bản vá chúng tôi có:

diff --git app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
index 8d3c526c280..fde2ef0d45d 100644
--- app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
+++ app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
@@ -57,7 +57,7 @@ class Mage_Adminhtml_Block_Customer_Group_Edit extends Mage_Adminhtml_Block_Widg
                 'form_key' => Mage::getSingleton('core/session')->getFormKey()
             ));
         } else {
-            parent::getDeleteUrl();
+            return parent::getDeleteUrl();
         }
     }

tuy nhiên, nhìn vào mã trên 1.9.3.10 (thông qua pháp sư LTS) tôi không thấy mã đó trong câu hỏi:

https://github.com/OpenMage/magento-lts/blob/1.9.3.x/app/code/core/Mage/Adminhtml/Block/Customer/group/Edit.php

NHƯNG, nó tồn tại cho 1.9.4

https://github.com/OpenMage/magento-lts/blob/1.9.4.x/app/code/core/Mage/Adminhtml/Block/Customer/group/Edit.php

Lý do có thể là một bản vá bị thiếu chưa được áp dụng trước đây.


4
Bạn đang thiếu bản vá SUPEE-10975.
Richard Feraro

mmm, theo bộ vá của tôi, đã được áp dụng: 2018-12-29 23:16:30 UTC | SUPEE-10975_CE_v1.9.3.10 | CE_1.9.3.10 | v1 | 91395a467666d7381ff4f9629f52a1d406eee65a | Ngày 8 tháng 11 13:45:47 2018 +0200 | ce-1.9.3.10-dev
ProxiBlue

Tên tệp của bản vá mới nhất là PATCH_SUPEE-10975_CE_v1.9.3.10_v1-2018-11-27-09-14-43.sh trong khi của bạn dường như được phát hành vào ngày 8 tháng 11 năm 2018 không phải là mới nhất tôi cho là.
Richard Feraro

1
Tôi đã hoàn nguyên PATCH_SUPEE-10975 và áp dụng lại, sau đó áp dụng lại mới nhất, tất cả đều hoạt động
ProxiBlue

Đây là một lỗi trong SUPEE-10975 khiến bạn không thể xóa Nhóm khách hàng. Có vẻ như bạn đã sửa nó bằng tay, điều này khiến bản vá mới này bị lỗi và cũng đang sửa lỗi này.
René Schep

3

Đang cố gắng cài đặt bản vá trên Magento 1.9.0.1 bằng cách sử dụng PATCH_SUPEE-11086_CE_1.9.1.0_v1-2019-03-26-03-03-13.sh Tôi đã gặp phải lỗi này

Hunk #1 FAILED at 141.
1 out of 1 hunk FAILED

Tôi đã sửa lỗi này bằng cách xóa đoạn mã sau khỏi 'app / etc / config.xml' và sau đó chạy lại bản vá

<dev>
    <template>
        <allow_symlink>0</allow_symlink>
    </template>
</dev>

3

Tôi cũng có một chút bối rối về việc đặt tên cho các bản vá M1.

Đối với các bản vá cũ hơn, họ đặt tên cho chúng như SUPEE-10975 for CE 1.9.3.4-1.9.3.10hoặc SUPEE-10888 for CE 1.9.2.0-1.9.2.4 (0.07 MB)nhưng bây giờ nó chỉ giải quyết một phiên bản PATCH_SUPEE-11086_CE_1.9.3.10_v1.sh.

Là bản vá hiện tại giải quyết tất cả các bản phát hành của một bản phát hành nhỏ hay chỉ bản cuối cùng?

Tôi đã thực hiện một thử nghiệm với một cửa hàng 1.9.3.1 và mọi thứ đã đi qua nhưng tôi không chắc chắn liệu điều đó có chính xác cho các bản phát hành khác không?


Cảm ơn Ryan! Đó cũng là câu trả lời cho câu hỏi @jason "Có ai biết tại sao không có phiên bản 1.8.0 / 1.8.1 không?" Cho rằng anh ta nên đi với Bản vá 1.7.0.2, phải không? Không biết rằng có các bản vá giải quyết nhiều bản phát hành nhỏ trước đây.
Sebastian

2
bạn có chắc chắn @RyanHoerr? Nó không phải là ngược lại, vì nó được cho là trên một chủ đề khác magento.stackexchange.com/questions/267576/ ,? Dường như, nếu chúng ta đoán từ phong cách đặt tên cũ, thì có thể áp dụng PATCH_SUPEE-11086_CE_1.7.0.2_v1-2019-03-26-03-02-36.sh từ 1.7.0.0 đến 1.7.0.2, và vì vậy, số phiên bản trong mỗi bản vá sẽ là số cuối cùng trong trường hợp đó. Bất cứ ai từ Magento có thể xác nhận logic đằng sau phong cách đặt tên mới đó là gì? Thx trước ..
Antoine Kociuba

2
Tôi sẽ đi với @AntoineKociuba Với 2 cửa hàng 1.8.1 khác nhau, tôi gặp phải 4 lỗi với Bản vá 1.7.0.2: - app / code / core / Mage / USA / etc / system.xml Hunk # 4 FAILED lúc 845 - ứng dụng /etc/config.xml Hunk # 1 FAILED ở 144 - app / locale / en_US / Mage_Widget.csv Hunk # 1 FAILED ở 6 - lib / Varien / Filter / Template.php Hunk # 2 FAILED ở 254 trong khi 1.9.1.0 chạy thông suốt. Tương tự với cửa hàng 1.9.3.1: Bản vá 1.9.2.4 doenst hoạt động trong khi 1.9.3.10 thì có.
Sebastian

3
@RyanHoerr điều này không chính xác. Tên bao gồm phiên bản mới nhất một bản vá áp dụng cho. Vì vậy, một bản vá cho 1.9.3.10 sẽ áp dụng cho 1.9.3.10, 1.9.3.9, .... xuống một bản vá khác. Chúng tôi sẽ cố gắng cải thiện việc đặt tên trong phiên bản tiếp theo và bạn cũng có thể sử dụng github.com/steverobbins/magedoad-cli vì nó sẽ thấy siêu dữ liệu phiên bản chính xác qua API.
Piotr Kaminski

Xóa thông tin xấu của tôi. Cảm ơn vì sự đúng đắn của bạn.
Ryan Hoerr

2

Ghi nhật ký ngắt trong Magento 1.9. Để sửa lỗi đăng nhập trong bản vá SUPEE-11086:

Trong ứng dụng / Mage.php:

-        $logValidator = new Zend_Validate_File_Extension($_allowedFileExtensions);
         $logDir = self::getBaseDir('var') . DS . 'log';
-        if (!$logValidator->isValid($logDir . DS . $file)) {
+        $validatedFileExtension = pathinfo($file, PATHINFO_EXTENSION);
+        if (!$validatedFileExtension || !in_array($validatedFileExtension, $_allowedFileExtensions)) {

Tài nguyên: https://gist.github.com/piotrekk vitaminki / 596cae2d25bf467edbd3d3f03ab9f8f

Tôi hi vọng cái này giúp được!


1

Tất cả các tệp PHP mới trong bản vá cho M1 có các vars mẫu không được xử lý

<?php
/**
 * {license_notice}
 *
 * @copyright   {copyright}
 * @license     {license_link}
 */

Không phải là một vấn đề nhưng có vẻ không chính xác. Tôi cũng có cảm giác tương tự sau SUPEE-10975.


1

Tôi đã nhận thấy một vấn đề với các tệp nhật ký không còn được tạo và chỉ được ghi ra nếu tệp nhật ký đã tồn tại. Điều này có vẻ được gây ra bởi dòng:

if (!$logValidator->isValid($logDir . DS . $file)) {

từ ứng dụng / Mage.php. Tôi đã sửa lỗi này bằng cách sử dụng logic cũ. Vì vậy, thay thế dòng trên với sau:

if (!self::helper('log')->isLogFileExtensionValid($file)) {

0

kiểm tra tệp ứng dụng / mã / lõi / Pháp sư / adminhtml / Chặn / Khách hàng / Nhóm / Chỉnh sửa Hunk # 1 FAILED ở 57. 1 trên 1 hunk FAILED

Trong bản vá 10975 đã có một lỗi tại thời điểm này. Tuyên bố trở lại bị mất. Có thể bạn đã sửa lỗi này sau khi áp dụng bản vá 10975 hoặc bỏ qua thay đổi. Lỗi đã được sửa vào năm 11086. Nếu dòng mã này đã được bạn điều chỉnh / bỏ qua, nó sẽ dẫn đến lỗi bạn mô tả khi áp dụng bản vá mới. Nếu bạn đã tự sửa lỗi, thì chỉ cần xóa khối trong tệp vá và chạy lại bản vá.


1
Tôi đã phải hoàn nguyên bản vá "ít chính thức" SUPEE-11043 để SUPEE-11086 hoạt động
Jeroen Vermeulen - Magehost

0

Sử dụng SUPEE-11086 | CE_1.9.1.0 theo đề xuất của Ryan Hoerr ở trên.

Áp dụng SUPEE-11086 | CE_1.9.1.0 | v1 | 3f120e6a795eed55267bd2b9164b3984913ddfc9 | Thứ Sáu, 22 tháng 3, 18h40: 11 2019 +0000 | 4f3f369e723fe31212cb5be9adda113f891d7f62..PHẦN

Đến CE_1.9.2.1

Tôi nhận được một thất bại trên mỗi tập tin.

Tôi đã áp dụng thành công các bản vá cho các repos khác.

Mã lõi không bị ảnh hưởng.

Danh sách các bản vá được áp dụng

SUPEE-6788
SUPEE-7405-CE-1-9-2-2
SUPEE-7405 
SUPEE-8788 
SUPEE-9652 
SUPEE-8967 
PATCH_SUPEE-9767_CE_1.9.3.0_v2
SUPEE-10266-CE-1.9.2.4
SUPEE-10415-ce-1.9.2.1
SUPEE-10570_CE_v1.9.2.2
SUPEE-10570_CE_v1.9.2.2
SUPEE-10570_CE_v1.9.2.2
SUPEE-10752_CE_v1.9.2.4
SUPEE-10888_CE_v1.9.2.4
SUPEE-10975_CE_v1.9.3.3

Cảm ơn @AntoineKociuba đã làm rõ. Tôi đã xác minh rằng tất cả các bản vá trước đó đều đúng, nhưng khi tôi áp dụng bản vá chính xác như được nêu dưới đây PATCH_SUPEE-11086_CE_1.9.2.4_v1 cho bản cài đặt 1.9.2.1 của tôi, tôi vẫn gặp lỗi trên tất cả trừ một hunk. Bạn có thể đề nghị một bản vá thủ công?
Bevan Holman

Bạn đang thất bại ở đâu?
René Schep

Điều này đã được giải quyết, tôi đã phải lấy một bản sao mới của repo. Cảm ơn René
Bevan Holman

0

Các sự cố với Bản vá M1.9.3.7 PATCH_SUPEE-11086_CE_1.9.3.10_v1.sh

checking file app/Mage.php
checking file app/code/core/Mage/Admin/Model/Session.php
checking file app/code/core/Mage/Adminhtml/Block/Api/Buttons.php
checking file app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit.php
checking file app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
Hunk #1 FAILED at 57.
1 out of 1 hunk FAILED
checking file app/code/core/Mage/Adminhtml/Block/Permissions/Buttons.php
checking file app/code/core/Mage/Adminhtml/Block/System/Design/Edit.php
checking file app/code/core/Mage/Adminhtml/Block/System/Store/Edit.php
checking file app/code/core/Mage/Adminhtml/Controller/Action.php
checking file app/code/core/Mage/Adminhtml/Helper/Data.php
checking file app/code/core/Mage/Adminhtml/Model/Email/PathValidator.php
checking file app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
Hunk #1 FAILED at 69.
1 out of 1 hunk FAILED

Xem như ứng dụng / mã / lõi / Mage / adminhtml / Chặn / Khách hàng / Nhóm / Edit.php không thành công. Tôi giả sử bạn đã áp dụng bản vá SUPEE-11043 mà SUPEE-11086 cho rằng bạn chưa thực hiện.
René Schep

0

Có thể xác nhận sự cố tồn tại khi cố gắng áp dụng SUPEE-11086trên phiên bản 1.9.1.1 mới được tải xuống và được vá đầy đủ, bao gồm mọi thứ lên đến và bao gồm Bản vá bảng điều khiển quản trị viên -MPERF-10509-CE-2019-03-13-06-31-24.diff

Bản vá lỗi trong các tập tin sau.

app/code/core/Mage/Adminhtml/Block/Api/Buttons.php
app/code/core/Mage/Adminhtml/Block/Permissions/Buttons.php
app/code/core/Mage/Api2/Block/Adminhtml/Roles/Buttons.php

Các tệp này không có thay đổi so với cam kết ban đầu của bản tải xuống v1.9.1.1. Sao chép các tệp từ cài đặt 1.9.2.4, áp dụng SUPEE-11086 và sau đó so sánh với nguồn v1.9.4.1 xác nhận chúng hiện khớp với nhau.

Magento v1.9.1.1 có vẻ như là một đứa trẻ có vấn đề ...


Tôi chỉ so sánh bản vá 1.9.2.4 với bản vá 1.9.1.0. Và có vẻ như sự khác biệt giữa các bản vá này là 3 tệp bạn đề cập. Vì vậy, có vẻ như bản vá 1.9.1.0 nên được sử dụng trên 1.9.1.1.
René Schep

0

Có thể xác nhận sự cố tồn tại khi cố gắng áp dụng SUPEE-11086trên phiên bản 1.9.3.0 mới được tải xuống và được vá đầy đủ, bao gồm mọi thứ lên đến và bao gồm Bản vá bảng điều khiển dành cho quản trị viên -MPERF-10509-CE-2019-03-13-06-31-24.diff

Bản vá lỗi trong app / config.xml vì thiếu nút bên dưới. Thêm nút trước khi chạy SUPEE-11086, không có vấn đề gì.

<config>
    </default>
        <dev>
            <template>
                <allow_symlink>0</allow_symlink>
            </template>
        </dev>
    </default>
</config>

0

Tôi phát hiện ra một vấn đề mới với mô hình Mage_Eav_Model_Attribute_Data_File

Trên thực thể khách hàng, tôi đã thêm thuộc tính tải lên tệp. Các thuộc tính này không bắt buộc và khi tôi muốn xóa một tệp mà không tải lên tệp mới, việc xóa không hoạt động, vì giá trị thuộc tính không được xác thực qua phương thức mớisetAttributeValidationAsPassed()

Cách khắc phục nhanh tôi đã thực hiện là trong phương thức validateValue($value)

if (!$attribute->getIsRequired() && !$toUpload) {
    $attribute->setAttributeValidationAsPassed(); // this new line is added 
    return true;
}

Vấn đề này dường như có mặt trong tất cả các bản phát hành Magento 1.x kể từ khi SUPEE-11086


0

Magento 1.9.3.1

Đã xảy ra sự cố khi cố gắng vá CE 1.9.3.1 bằng cách sử dụng bản vá PATCH_SUPEE-11086_CE_1.9.3.10_v1.sh:

checking file app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
Hunk #1 FAILED at 69.
1 out of 1 hunk FAILED
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.