Phát hiện thay đổi chủ sở hữu của tiện ích mở rộng Chrome đã cài đặt
(github.com/classvsoftware)- Under New Management là một tiện ích mở rộng định kỳ kiểm tra xem thông tin nhà phát triển của các tiện ích mở rộng trình duyệt đã cài đặt có thay đổi trên Chrome Web Store hoặc Firefox Addons hay không
- Khi thông tin nhà phát triển thay đổi, tiện ích sẽ hiển thị huy hiệu màu đỏ trên biểu tượng tiện ích để người dùng biết về việc đổi quyền sở hữu
- Nhu cầu này xuất phát từ vấn đề các nhà phát triển tiện ích thường xuyên nhận được đề nghị mua lại, và trong hầu hết trường hợp bên mua lại có ý định lợi dụng người dùng hiện có
- Người dùng có thể không biết rằng quyền sở hữu tiện ích mở rộng đã cài đặt đã thay đổi và tiện ích đó có khả năng đã bị xâm hại, nên công cụ này cho họ cơ hội tự đánh giá
- Do trình duyệt đặt ra các hạn chế đối với việc chỉnh sửa miền của chợ tiện ích mở rộng, việc kiểm tra thông tin nhà phát triển được ủy quyền cho máy chủ API ExBoost
Phát hiện thay đổi quyền sở hữu tiện ích mở rộng
- Under New Management thỉnh thoảng kiểm tra xem thông tin nhà phát triển của các tiện ích mở rộng đã cài đặt có bị thay đổi trên Chrome Web Store hoặc cửa hàng Firefox Addons hay không
- Nếu có thay đổi, huy hiệu màu đỏ sẽ xuất hiện trên biểu tượng tiện ích mở rộng để người dùng nhận biết việc đổi quyền sở hữu
- Mục tiêu là cho người dùng cơ hội đưa ra đánh giá dựa trên thông tin về phần mềm họ đang sử dụng
Vì sao cần thiết
- Nhà phát triển tiện ích mở rộng liên tục nhận được đề nghị mua lại tiện ích của mình
- README cho biết trong gần như mọi trường hợp, người mua có mục đích lừa người dùng hiện có
- Người dùng có thể không biết rằng quyền sở hữu tiện ích mở rộng đã cài đặt đã thay đổi, và hiện tiện ích đó có khả năng đã bị xâm hại
Cách cài đặt
- Cài đặt trên Chrome: Chrome Web Store
- Cài đặt trên Firefox: Firefox Add-ons
- Hoặc có thể tải prebuilt release, giải nén tệp
.zipvà nạp thư mụcdistvào trình duyệt
Build từ mã nguồn
- Under New Management sử dụng Plasmo
pnpm install: cài đặt các phụ thuộcpnpm dev: chạy cục bộpnpm build --zip: build bản phát hànhpnpm build --target=firefox-mv3: build cho Firefox
Vì sao cần máy chủ bên ngoài
- Trình duyệt đặt ra quy tắc đặc biệt đối với việc chỉnh sửa miền của chợ tiện ích mở rộng
- Ví dụ, không thể thiết lập quy tắc
declarative_net_requestchochromewebstore.google.com - Vì vậy, tác vụ kiểm tra thông tin nhà phát triển được ủy quyền cho máy chủ API ExBoost
1 bình luận
Ý kiến trên Hacker News
ID của tiện ích mở rộng được suy ra từ khóa riêng tư mà nhà phát triển tải lên cùng lúc khi lần đầu đưa ứng dụng lên cửa hàng; sau đó nếu trong tệp ZIP tải lên có
key.pemkhác thì ID sẽ thay đổiTuy nhiên, nếu không có
key.pemthì ID của tiện ích mở rộng vẫn được giữ nguyên. Vì vậy, nếu ID thay đổi thì có khả năng chủ sở hữu đã thay đổi, nhưng cũng có thể chủ sở hữu ban đầu đã chuyển khóa riêng tư cho chủ mới. Google không yêu cầu khóa riêng tư cho mỗi lần tải lên, nên chủ mới vẫn có thể phát hành thay đổi mà không cần khóa đóHệ sinh thái tiện ích mở rộng khá thú vị nên tôi cũng đang làm công cụ cho lĩnh vực này. Tôi muốn tạo một kho GitHub cho từng tiện ích mở rộng cụ thể, ghi lại mỗi bản cập nhật dưới dạng thay đổi trong kho, rồi chạy trình phân tích tĩnh và phân tích nhiễm bẩn thời gian chạy để theo dõi xem đầu vào người dùng có chảy vào các sink nguy hiểm như
evalhaypostMessagehay không: https://github.com/milesrichardson/crxmonTrong lúc đàm phán, tôi nói rằng tôi sẽ gỡ tiện ích xuống, bàn giao toàn bộ mã nguồn để họ tự phát hành, nhưng phía bên kia lại kỳ vọng tôi giao luôn cả thông tin đăng nhập tài khoản tiện ích mở rộng Opera. Cuối cùng tôi hủy thương vụ, và dù loại công cụ này cũng hữu ích ở mức nào đó, tôi đồng ý rằng một trình quét mã độc cho tiện ích mở rộng sẽ tốt hơn
Nhà phát triển phải dùng khóa riêng tư để ký tiện ích mở rộng hoặc manifest, và phải chia sẻ khóa công khai hoặc đính kèm nó trong bản tải lên. Các bản cập nhật cũng phải tiếp tục được ký bằng cùng khóa riêng tư đó, và miễn là khóa không đổi thì có thể xác minh cùng một khóa riêng tư đã được dùng thông qua khóa công khai của lần tải lên đầu tiên. Việc các lần tải lên sau có chứa khóa công khai hay không không phải yếu tố cốt lõi. Nếu bán hoặc chia sẻ khóa riêng tư thì người khác có thể tạo ra các bản cập nhật được ký hợp lệ, nhưng đó là rủi ro phát sinh từ việc người ký không giữ bí mật khóa riêng tư. Dù là Google hay bất kỳ ai, nếu khóa riêng tư bị chia sẻ thì đảm bảo nguồn gốc của tiện ích mở rộng sẽ sụp đổ
Nhưng tôi thực sự nghi ngờ việc Google cho phép chủ mới phát hành thay đổi mà không cần khóa riêng tư là khả thi. Chrome Web Store rất khắt khe ngay cả với những chuyện nhỏ, nên thật lạ khi họ lại bỏ qua điểm đó
Tôi đang dùng 3 tiện ích mở rộng chỉ công khai cho tester, để cài dễ trên nhiều máy mà không cần chế độ nhà phát triển hay
rsync/robocopy. Nhưng cuối tuần này Chrome đã vô hiệu hóa tất cả trên chỉ một máy với lý do “không được đăng trên Chrome Web Store và có thể đã được thêm vào mà người dùng không biết”. Cũng không thể bật lại bằng cách ép buộc, còn trên cửa hàng thì nó hiện “đã vô hiệu hóa” và có nút “kích hoạt ngay”, nhưng chỉ làm banner biến mất rồi sau khi làm mới lại hiện lại. Hồ sơ Chrome đó đang đăng nhập bằng tài khoản trong danh sách cho phépHuy hiệu trên trang Chrome Web Store cho thấy tài khoản nhà phát triển của tôi không bị xử phạt và trạng thái vẫn tốt. Nếu không đăng nhập bằng email trong danh sách cho phép thì có lẽ tôi cũng không xem được trang đó. Việc họ “quan tâm rất kỹ” như thế mà lại cho phép cập nhật không cần khóa thì thật khó hiểu
CWS tuyệt đối không được thay đổi ID của một tiện ích mở rộng hiện có. Đó là vì ID là thứ nhận dạng duy nhất của tiện ích mở rộng. Nếu ID thay đổi, ứng dụng Chrome khách sẽ không thể yêu cầu bản cập nhật cho tiện ích đó, và CWS cùng Chrome không hỗ trợ chức năng chuyển người dùng từ tiện ích này sang tiện ích khác
Theo tôi biết, nếu trong ZIP có
key.pemsau lần gửi đầu tiên thì CWS sẽ từ chối. Nếu ID tiện ích mở rộng đã thay đổi thì đó không còn là cùng một tiện ích nữa. Việc chủ mới có thể phát hành thay đổi mà không cần PEM nhìn chung là đúng, nhưng trong trường hợp nhà phát triển tự ký tiện ích đã gửi lên CWS thì sẽ không thể cập nhật nếu không có PEM. Thành thật mà nói tôi không biết đó có còn là tính năng khả dụng hiện nay không; trước đây nó từng là một cái bẫy khổng lồ khiến nhà phát triển mất khóa riêng tư dùng cho bản tải lên của mình và làm mất luôn cơ sở cài đặtGần như ai cũng sẽ đồng ý miễn là giá đủ cao; khác biệt chỉ là cần bao nhiêu tiền mà thôi
Vài tháng trước tôi đã làm một tiện ích mở rộng miễn phí, mã nguồn mở để lướt nhanh quảng cáo YouTube rồi chia sẻ ở đây, và nó đã lên trang đầu.
Trong vòng một tuần, một người từng bình luận trên bài Show HN của tôi đã sao chép nó rồi quảng bá phiên bản của họ trên Reddit, sau đó lan truyền mạnh và vượt 300 nghìn người dùng: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
Tôi đã tự hỏi tại sao họ không gửi PR cho tiện ích mở rộng miễn phí, mã nguồn mở đó mà lại đi sao chép, nhưng vài tuần sau thì họ đang tìm cách bán nó trên nhiều trang với giá 5 chữ số. Có thể họ vẫn còn sở hữu nó, nhưng điều dễ nhận thấy là cả nhà phát triển được đăng trên Chrome Store cũng đã khác so với lúc công bố ban đầu
Tôi không hiểu hết toàn bộ bối cảnh, nhưng tiện ích mở rộng đó thực chất chỉ là một đoạn JavaScript vụn vặt khoảng 50 dòng. Nói rằng ai đó đã đánh cắp nó là một tuyên bố khá mạnh. Bản thân ý tưởng này không có nhiều giá trị, và cũng khó nói rằng nó quá mới mẻ. Ngay cả nếu giả sử phía kia chỉ lấy cảm hứng, thì trình tự thời gian về việc ai làm gì trước cũng không thật sự rõ ràng
Chỉ là việc YouTube và Chrome sẽ để nó tiếp tục hoạt động được bao lâu lại là chuyện khác, và có thể họ cũng không thích điều đó
“…nếu cả thế giới hát bài hát của bạn / và treo hết tranh của bạn / hãy nhớ rằng những gì từng là của bạn giờ là của mọi người / điều đó không hẳn đúng cũng không hẳn sai / bạn có thể bám víu vào đó bao lâu tùy ý / chỉ là cuối cùng người bồn chồn cũng chỉ là bạn…” — “What Light” của Wilco
Rất hữu ích, nhưng như người khác đã nói, đây nên là tính năng tích hợp của trình duyệt.
Tôi vẫn chưa xem sâu mã nguồn, nhưng muốn biết liệu nó có tự động thông báo khi có thay đổi quyền sở hữu hay không. Không nhất thiết phải theo thời gian thực, nhưng có báo khi khởi động không, hay là phải chạy lệnh kiểm tra thủ công?
Chủ đề này cũng từng gây chú ý vài tháng trước: https://news.ycombinator.com/item?id=36233068
Như bình luận ở đầu khi đó đã nói, Firefox và Chrome nên thay đổi chính sách tự động nâng cấp tiện ích mở rộng trong những trường hợp như thế này. Nếu tiện ích công khai việc đổi chủ thì nên yêu cầu người dùng phê duyệt bản nâng cấp, còn nếu không công khai thì người dùng phải có thể báo cáo là độc hại. Ngoài ra, tiêu đề có lẽ nên có thêm “Show HN”
Tôi cho rằng những kiểu thông báo mạnh hơn sẽ quá xâm phạm
Điều đó làm giảm giá trị của sản phẩm hoặc công ty khi bán lại. Nó thân thiện với người dùng, nhưng lại không thân thiện với những người tạo ra sản phẩm còn phải trả hóa đơn
Đây không phải chuyện để đùa.
Tôi từng sở hữu một tiện ích mở rộng Chrome mã nguồn mở khá phổ biến trong vài năm, và tổng số tiền quyên góp nhận được còn không đủ tiền cà phê trong một tháng.
Nhưng các lời đề nghị mua lại tiện ích mở rộng thì xuất hiện rất nhiều và số tiền thì điên rồ, bao gồm cả những trường hợp rõ ràng là vì mục đích xấu, thậm chí còn nói trắng ra như vậy. Tôi đã từ chối tất cả, nhưng mong đợi rằng đạo đức của nhà phát triển ban đầu sẽ là cơ chế an ninh và quyền riêng tư duy nhất trong hoàn cảnh này thì không phải là một nhận định tỉnh táo
Tôi khá đồng cảm với mục tiêu và cũng hiểu các giới hạn kỹ thuật, nhưng việc gửi danh sách toàn bộ tiện ích mở rộng của người dùng tới một mạng quảng cáo lấy tiện ích mở rộng làm trung tâm thì hơi đáng ngờ.
Theo giải thích, lý do cần máy chủ bên ngoài là vì trình duyệt áp dụng các quy tắc đặc biệt với việc chỉnh sửa các tên miền chợ tiện ích như
chromewebstore.google.com, nên việc kiểm tra thông tin nhà phát triển được ủy quyền cho máy chủ API của ExBoost.https://www.extensionboost.com/
ExBoost được mô tả là một mạng lưới hợp tác dành cho các tiện ích mở rộng trình duyệt muốn có thêm người dùng và đánh giá. Cách hoạt động là chèn một slot ExBoost vào UI của tiện ích, rồi hiển thị quảng bá cho các tiện ích tương tự hoặc yêu cầu đánh giá.
Xem kết quả API của một tiện ích tôi đã cài thì có metadata liên quan đến nhà phát triển. Tôi đã thử Chrome API
chrome.management.get(id)nhưng nó không trả về thông tin này, và cũng có vẻ không có cách nào lấy nội dungmanifest.jsontheo phương thức lập trình. Vì vậy, để làm được việc tiện ích này đang cố làm thì quả thực cần một nguồn bên ngoài.https://github.com/classvsoftware/under-new-management/blob/...
https://api.extensionboost.com/v1/developer?extension_ids=gh...
Nội dung là muốn tôi nhúng mã của họ vào tiện ích của mình, kiểu “bạn hiển thị của tôi thì tôi cũng hiển thị của bạn. Chi phí 0, cả hai cùng có lợi”. Trông khá đáng ngờ nên tôi đánh dấu spam, và nó không khác mấy so với các email rác khác tôi từng nhận từ bọn lừa đảo.
Firefox có chương trình tiện ích mở rộng được đề xuất của Mozilla, và họ nói rằng trước khi được đưa vào đó, tiện ích phải trải qua quá trình đánh giá kỹ thuật nghiêm ngặt bởi các chuyên gia bảo mật nội bộ: https://support.mozilla.org/en-US/kb/recommended-extensions-...
Tuy nhiên, chỉ nhìn tài liệu hỗ trợ thì không rõ liệu mọi bản cập nhật có đều được rà soát trước khi phát hành hay không. Nếu lần nào cũng được duyệt thì điều này sẽ phần nào giải quyết vấn đề với các tiện ích phổ biến, nhưng tôi cũng thắc mắc việc đó gây chậm trễ bao nhiêu khi cần tung ra bản vá bảo mật khẩn cấp.
Chính sách cá nhân hiện tại của tôi là chỉ cho phép những tiện ích được tuyển chọn như vậy chạy trên mọi trang và tab.
Tức là một cấu trúc trong đó ngay cả các tổ chức rất nổi tiếng hay được biết đến rộng rãi cũng có thể bị cấm nếu nhiều lần vi phạm quy tắc hoặc cố lách các chức năng của marketplace.
Trong những trường hợp thật sự ác ý, khi tiện ích được sang tay thì thường người ta bán luôn cả thông tin xác thực của tài khoản nhà phát triển Google, nên những trường hợp như vậy sẽ không bị phát hiện.
Tôi đã cài adblock từ rất lâu và cực kỳ thích nó.
Đến khi mua máy mới và phải cài lại, lần đầu tiên tôi mới để ý đến các quyền mà nó yêu cầu, và đúng là choáng váng. Về mặt logic thì việc muốn chặn quảng cáo đòi hỏi nó phải thấy được những gì tôi đang xem là hợp lý, nhưng trước đó tôi chưa từng nghiêm túc nghĩ về điều đó.
Giờ tôi dùng Pi-hole và không dùng bất kỳ tiện ích mở rộng nào nữa.
Dù vậy, việc mọi người có lựa chọn phù hợp với mình vẫn là điều tốt, và mỗi người có hồ sơ rủi ro cũng như mối lo ngại khác nhau.
Một số tiện ích là mã nguồn mở và đáng tin cậy, nhưng nhiều cái thì không, và có vẻ mọi người gặp khó khăn trong việc thẩm định chúng.
Bạn chỉ cung cấp danh sách chặn, còn trình duyệt sẽ tự thực hiện việc chặn. Tôi không biết Firefox có làm được như vậy không: https://developer.apple.com/documentation/safariservices/cre...
Nếu là người mua một tiện ích độc hại, chẳng phải họ có thể cứ giữ nguyên tên nhà phát triển để né chuyện này sao? Hay Chrome Extension Store quản lý tên nhà phát triển rất chặt?
Chẳng hạn, một tác nhân quốc gia độc hại có thể đề nghị tác giả uBlock hàng chục triệu đô la để đổi lấy quyền truy cập vào rất nhiều trình duyệt. Tôi không biết xét về kinh tế điều đó có hợp lý không, nhưng với các tiện ích ngách hơn thì chắc chắn có thể nhắm tới với chi phí rẻ hơn nhiều.
Tôi tự hỏi liệu vấn đề này có nghiêm trọng hơn trên Chrome so với các trình duyệt khác không
Tiện ích mở rộng trình duyệt duy nhất tôi dùng là HonorLock, một phần mềm giám sát thi cử, và tôi bắt buộc phải dùng nó. Tiện ích này chỉ dành cho Chrome, nên thỉnh thoảng tôi dùng Chrome vì HonorLock. Nếu mở liên kết cài đặt trên Safari, nó sẽ hiện yêu cầu cài Chrome: https://app.honorlock.com/install/extension
Tôi tự hỏi liệu chỉ tiện ích mở rộng của Chrome mới có đặc điểm nào cho phép trường hợp sử dụng của HonorLock, đồng thời khiến công cụ trong bài viết này hữu ích hơn không