chuyển đổi: không được ủy quyền `aaaa` @ error / const const.c / ReadImage / 453


309

Tôi muốn tạo một pic captcha bằng cách sử dụng converttừ ImageMagick.

Và tôi làm theo điều này , nhưng có một số vấn đề.

Đầu vào Trong vỏ linux của tôi:

convert -background white -fill black -font FreeSerif-Bold -pointsize 36 label:'adfgh' ./test.png

Lỗi là:

chuyển đổi: không được ủy quyền adfgh@ error / constolarship.c / ReadImage / 453. convert: thiếu tên tệp hình ảnh ./test.png@ error / convert.c / ConvertImageCommand / 3015

ImageMagick của tôi: Phiên bản: 6.7.2-7, tôi cài đặt nó với yum install ImageMagick.

Tôi tránh thất bại. Có lời khuyên nào không?


7
Kiểm tra lại policy.xml. Tùy chọn bảo mật có thể ngăn chặn label:giao thức.
emcconville

2
cảm ơn! Tôi sửa đổi tệp chính sách, nhận xét dòng này "<chính sách tên miền" "coder" Rights = "none" mẫu = "LAEBL"> ". Nó không hoạt động! Cảm ơn !
jianwei

3
Chính sách ở đâu?
Arnold Roa

3
/etc/ImageMagick/policy.xml
jianwei

6
/etc/ImageMagick-6/policy.xml
xerostomus

Câu trả lời:


445

Lưu ý: giải pháp trong câu trả lời này và các câu trả lời khác liên quan đến việc vô hiệu hóa các biện pháp an toàn có sẵn để khắc phục các lỗ hổng thực thi mã tùy ý. Xem ví dụ này liên quan đến ghostscript và thông báo liên quan đến Ubuntu này . Chỉ tiếp tục với các giải pháp này nếu đầu vào convertđến từ một nguồn đáng tin cậy.

Tôi sử dụng ImageMagick trong php (v.7.1) để cắt tệp PDF thành hình ảnh.

Đầu tiên tôi gặp lỗi như:

Loại ngoại lệ: ImagickException

Thông báo ngoại lệ: không được ủy quyền ..... @ lỗi / constolarship.c / ReadImage / 412

Sau một số thay đổi trong /etc/ImageMagick-6/policy.xmltôi bắt đầu bị xóa sổ như:

Loại ngoại lệ: ImagickException

Thông báo ngoại lệ: không thể tạo tệp tạm thời ..... Quyền bị từ chối @ error / pdf.c / ReadPDFImage / 465

Sửa chữa của tôi :

Trong tệp /etc/ImageMagick-6/policy.xml(hoặc /etc/ImageMagick/policy.xml)

  1. dòng bình luận

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. thay đổi dòng

    <policy domain="coder" rights="none" pattern="PDF" />

    đến

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. thêm dòng

    <policy domain="coder" rights="read|write" pattern="LABEL" />

Sau đó khởi động lại máy chủ web của bạn (nginx, apache).


54
Đây sẽ là câu trả lời chấp nhận được nếu bạn gặp phải sự cố này trên hộp Ubuntu kể từ ngày 4 tháng 10 năm 2018. Có vấn đề nào khác từ các bản phát hành khác không?
LucasBr

12
Tôi cũng vừa gặp vấn đề này ngay hôm nay trên Ubuntu 16.04. Có điều gì đó thay đổi? Ngoài ra, tôi không cần thêm dòng LABEL, chỉ cần thay đổi quyền cho PDF từ "không" thành "đọc".
Bryant Kou

4
Giải quyết một vấn đề rất giống trong hộp LTS Ubuntu 18.04.1 của tôi
mottaandez

3
Trong máy chủ của tôi, policy.xmltệp được cập nhật lần cuối vào ngày 29 tháng 9, nhưng các vấn đề mới phát sinh ngày hôm nay. Tôi đang sử dụng máy chủ Ubuntu 14.04.5, nhưng đặt cập nhật tự động. Trong nhật ký apt, tôi đã tìm thấy về bản cập nhật này:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
Donny Kurnia


161

Tôi sử dụng nhiều lần convertlệnh ImageMagic để chuyển đổi *.tiftệp thành *.pdftệp.

Tôi không biết tại sao nhưng hôm nay tôi bắt đầu nhận được lỗi sau:

convert: not authorized `a.pdf' @ error/constitute.c/WriteImage/1028.

Sau khi ban hành lệnh:

convert a.tif a.pdf

Sau khi đọc câu trả lời trên tôi đã chỉnh sửa tập tin /etc/ImageMagick-6/policy.xml

và thay đổi dòng:

policy domain="coder" rights="none" pattern="PDF" 

đến

policy domain="coder" rights="read|write" pattern="PDF"

và bây giờ mọi thứ hoạt động tốt.

Tôi có "ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28" trên "Ubuntu 16.04.5 LTS".


1
Tôi đang sử dụng openSuse Leap 15.0 và đã sử dụng "so sánh" để so sánh các trang PDF, cùng một lỗi, ngay cả sau khi cập nhật bởi openSuse vào ngày 10 tháng 10 năm 2018. Sau khi thay đổi dòng như mô tả ở đây, nó đã hoạt động.
Keks Liều

Tôi đang dùng Ubuntu Xenial 16.04 LTS và đột nhiên tôi bắt đầu thấy lỗi đó trong nhật ký Apache. Tôi xác nhận rằng sau khi thay đổi chính sách như được mô tả ở đây, vấn đề đã được giải quyết.
dùng2641103

5
Đây là câu trả lời đúng tối thiểu - câu trả lời của sNICkerssss là đúng về mặt kỹ thuật tuy nhiên chỉ cần một bước để sử dụng dòng lệnh của convertPDF.
davidA

1
'Vấn đề' này là nhanh chóng & bẩn 'khắc phục' chức năng Ghostscript, về lâu dài chúng ta nên tìm sự thay thế cho Ghostscript (và có thể là ImageMagick).
9ilsdx 9rvj 0lo

4
Đừng làm điều này. Hạn chế này đã được giới thiệu như một biện pháp bảo mật vì có thể thực thi mã từ xa (xem launchpad.net/ubfox/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Vì vậy, câu trả lời đúng là: Bạn nên sử dụng một chương trình khác cho nhiệm vụ này.
Mary

66

Lưu ý: giải pháp này và bất kỳ giải pháp "chỉnh sửa chính sách" nào khác sẽ vô hiệu hóa các biện pháp an toàn trước các lỗ hổng thực thi mã tùy ý trong ImageMagick. Nếu bạn cần xử lý dữ liệu đầu vào mà bạn không kiểm soát 100%, bạn nên sử dụng một chương trình khác (không phải ImageMagick).

Nếu bạn vẫn ở đây, bạn đang cố gắng chỉnh sửa hình ảnh mà bạn có toàn quyền kiểm soát, biết là an toàn và người dùng không thể chỉnh sửa.

Có một /etc/ImageMagick/policy.xmltập tin được cài đặt bởi yum. Nó không tuân theo hầu hết mọi thứ (để bảo mật và bảo vệ hệ thống của bạn khỏi bị quá tải với các cuộc gọi ImageMagick).

Nếu bạn gặp ReadImagelỗi như trên, bạn có thể thay đổi dòng thành:

<policy domain="coder" rights="read" pattern="LABEL" />

Mà nên khắc phục vấn đề.

Các tập tin có một loạt các tài liệu trong đó, vì vậy bạn nên đọc nó. Ví dụ: nếu bạn cần thêm quyền, bạn có thể kết hợp chúng như:

<policy domain="coder" rights="read|write" pattern="LABEL" />

... tốt hơn là xóa tất cả các kiểm tra quyền (nghĩa là xóa hoặc nhận xét dòng).


2
Đừng làm điều này. Hạn chế này đã được giới thiệu như một biện pháp bảo mật vì có thể thực thi mã từ xa (xem launchpad.net/ubfox/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Vì vậy, câu trả lời đúng là: Bạn nên sử dụng một chương trình khác cho nhiệm vụ này.
Mary

5
@Marian Sử dụng chương trình khác không hữu ích - OP đã hỏi cụ thể về ImageMagick. Câu trả lời phải là "Bạn nên biết những gì bạn đang làm, tự chịu rủi ro, đảm bảo hệ thống của bạn được an toàn, đây là lý do tại sao bạn không nên và đây là cách thực hiện".
KolonUK

2
OP (và những người đến đây bằng tìm kiếm trên web, bao gồm cả tôi) đã sử dụng ImageMagick cho đến bây giờ; vì vậy, tất nhiên, lần thử đầu tiên của họ trong việc giải quyết vấn đề này là tìm giải pháp bằng ImageMagick, vì điều đó đòi hỏi ít thay đổi nhất. Điều đó không có nghĩa là họ muốn sử dụng ImageMagick một cách vô điều kiện.
Mary

3
Tôi thấy cách tiếp cận loại bỏ bảo mật này rất không phù hợp đối với một trang web Hỏi & Đáp được xem bởi hàng ngàn người (trang này đã được xem 100 nghìn lần và là kết quả tìm kiếm hàng đầu cho vấn đề này) - và hãy làm rõ ở đây, có một nỗ lực lớn và rõ ràng để nhấn mạnh tầm quan trọng của lỗ hổng này, bao gồm một trang web chuyên dụng được thiết lập để công khai nó ( fantetragick.com ) - Đề xuất của Marian rằng các lựa chọn thay thế nên được tìm kiếm thay vì bỏ qua bảo mật là hợp lệ. Tôi đã chọn sử dụng GIMP thay thế. popplerlà một thay thế cho GhostScript ( convertdựa trên để rasterize các trang PDF thành hình ảnh)
Louis Maddox

1
Không có tùy chọn dòng lệnh để tạm thời vô hiệu hóa chính sách bảo mật? Sau đó, chúng tôi có thể sử dụng nó cho các tệp PDF cụ thể mà chúng tôi tin tưởng.
HRJ

27

Nếu ai đó cần làm điều đó với một lệnh sau khi cài đặt, hãy chạy nó!

sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml

6
Ngắn hơn:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
leftaroundabout

5
Súc tích hơn. Và sudo được yêu cầu chỉnh sửa một tập tin bên trong / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
Naveed

đảm bảo cập nhật ghostscript kb.cert.org/vuls/id/332928
ykay nói Phục hồi Monica

24

Câu trả lời có số phiếu cao nhất (tôi không đủ danh tiếng để thêm bình luận ở đó) gợi ý để bình luận về dòng MVG, nhưng hãy ghi nhớ điều này:

CVE-2016-3714

ImageMagick hỗ trợ các tệp ".svg / .mvg", điều đó có nghĩa là những kẻ tấn công có thể tạo mã bằng ngôn ngữ kịch bản, ví dụ MSL (Magick Scripting Language) và MVG (Magick Vector Graphics), tải nó lên một máy chủ được ngụy trang dưới dạng tệp hình ảnh và buộc phần mềm để chạy các lệnh độc hại ở phía máy chủ như được mô tả ở trên. Ví dụ: thêm các lệnh sau vào một tệp và tải nó lên máy chủ web sử dụng phiên bản ImageMagick dễ bị tổn thương sẽ dẫn đến việc chạy lệnh "ls -la" trên máy chủ.

khai thác.jpg:

đẩy hộp xem ngữ cảnh đồ họa 0 0 640 480 điền 'url ( https://website.com/image.png "| ls" -la)' pop bối cảnh đồ họa

Bất kỳ phiên bản nào dưới 7.0.1-2 hoặc 6.9.4-0 đều có khả năng bị tổn thương và các bên bị ảnh hưởng nên sớm nâng cấp lên phiên bản ImageMagick mới nhất.

Nguồn


3
Tôi không nhận xét MVG và PDF -> chuyển đổi JPG vẫn hoạt động. Cảm ơn bạn.
Rimu Atkinson

1
6.7.7-10 trông giống như phiên bản mới nhất, phát hành ngày 28/9/2018). Tôi đang thiếu gì? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
HaPsantran

có phiên bản mới hơn fantemagick.org/script/doad.php Có lẽ bản phân phối Linux của bạn sử dụng bản cũ hơn. Ubuntu 16.04 hiện đang sử dụng 6.8.9-9
Nikolay Ivanov

1
Thật tuyệt, vì vậy giải pháp thích hợp cho nhóm Ubuntu sẽ là cập nhật hình ảnh lên phiên bản mới hơn, không phá vỡ phiên bản hiện có.
9ilsdx 9rvj 0lo

2
Không. Ubuntu là một bản phân phối đóng băng tính năng và sẽ không phát hành các bản phát hành mới hơn.
Buo-Ren Lin

19

Sau bản cập nhật gần đây trên hệ thống Ubuntu 16.04 của tôi, tôi cũng đã bắt đầu gặp lỗi này khi cố chạy convert trên các tệp .ps để chuyển đổi chúng thành pdf.

Sửa lỗi này làm việc cho tôi:

Trong một thiết bị đầu cuối chạy:

sudo gedit /etc/ImageMagick-6/policy.xml

Điều này sẽ mở tệp chính sách trong trình soạn thảo văn bản gedit. Nếu không, magick hình ảnh của bạn có thể được cài đặt ở một nơi khác. Sau đó thay đổi

rights="none" 

đến

rights="read | write" 

cho các dòng PDF, EPS và PS gần cuối tệp. Lưu và thoát, và magick hình ảnh sẽ hoạt động trở lại.


1
đảm bảo cập nhật ghostscript kb.cert.org/vuls/id/332928
ykay nói Phục hồi Monica

Điều này đã giúp trên Ubuntu 18.04 ImageMagick 6.9.7-4. Cảm ơn.

11

Chỉ cần xóa tệp /etc/ImageMagick/policy.xml.


1
đơn giản nhưng hoàn hảo tôi đã làm điều này khi thử nghiệm thất bại trên chuyến đi
Dan Rey Oquindo

1
Đây là giải pháp duy nhất làm việc từ hàng tấn bài viết. Tôi đổi tên nó thành policy-disabled.xml. Tôi nghĩ rằng tôi sẽ khôi phục nó cho đến khi tôi chắc chắn rằng các vấn đề bảo mật đã được giải quyết
groovenectar

Và sau khi khởi động lại kernel của bạn trong trường hợp máy tính xách tay jupyter
Nicole Douglas

2

Sau khi đọc một số đề xuất ở đây và kết hợp các ý tưởng, đối với tôi, những thay đổi trong /etc/ImageMagick-6/policy.xml là cần thiết:

<policy domain="coder" rights="read|write" pattern="PDF" />

... Rights = "none" không giúp được gì. ... mẫu = "LABEL" không cần thiết. Mặc dù tôi không làm việc với các tệp png lớn (chỉ ~ 1 Mb) nhưng một số thay đổi về giới hạn bộ nhớ cũng cần thiết:

<policy domain="resource" name="memory" value="2GiB"/>

(thay vì 256Mib) và

<policy domain="resource" name="area" value="2GB"/>

(thay vì 128 MB)



2

Nếu bạn không cần xử lý các tệp raster và PDF / PS / EPS thông qua cùng một công cụ, đừng nới lỏng bảo mật của ImageMagick.

Thay vào đó, hãy bảo vệ sâu cho các ứng dụng web của bạn nguyên vẹn, kiểm tra xem Ghostscript của bạn đã được vá cho tất cả các -dSAFERlỗ hổng đã biết và sau đó gọi nó trực tiếp.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER đưa bạn ra khỏi chế độ tương thích "chạy Postcript" sẽ có toàn quyền cho phép tương tác với thế giới bên ngoài dưới dạng chế độ lập trình hoàn chỉnh ".
  • -r300 đặt DPI mong muốn thành 300 (mặc định là 72)
  • -sDEVICEchỉ định định dạng đầu ra (Xem phần Thiết bị trong sách hướng dẫn để biết các lựa chọn khác.)
  • -o là một tốc ký cho -dBATCH -dNOPAUSE -sOutputFile=
  • Phần này của hướng dẫn sử dụng Ghostscript đưa ra một số định dạng ví dụ cho đầu ra tên tệp đa tệp, nhưng đối với định nghĩa cú pháp thực tế, nó chỉ cho bạn tài liệu về hàm C printf (3) .

Nếu bạn đang hiển thị các tệp EPS, hãy thêm -dEPSCropđể nó không đưa đầu ra của bạn vào kích thước trang và sử dụng -sDEVICE=pngalphađể có được nền trong suốt.


Cảm ơn cho một giải pháp an toàn hơn. Dù vậy, không chắc chắn tôi sẽ có thể nhớ các tùy chọn dòng lệnh GhostScript! :)
Cris Luengo

@CrisLuengo Tôi cũng sẽ không. Đó là lý do tại sao tôi đã đăng nó lên càng nhiều kết quả của Google mà tôi có thể tìm thấy nơi đó là một câu trả lời hay cho câu hỏi được đặt ra. : P
ssokolow

1
Tôi đã tìm thấy kết quả tốt bằng cách sử dụng -r600 -dDownScaleFactor=4để tạo một tệp có 150 dpi nhưng khử răng cưa tốt hơn.
John Cole

0

Tôi cũng đã gặp lỗi error/constitute.c/ReadImage/453 khi cố gắng chuyển đổi một eps thành một gif với hình ảnh ảo thuật. Tôi đã thử giải pháp được đề xuất bởi sNICkerssss nhưng vẫn có lỗi (mặc dù khác với giải pháp đầu tiên) e error/constitute.c/ReadImage/412 Điều gì đã giải quyết vấn đề là đưa readvào các mục khác

 <policy domain="coder" rights="read" pattern="PS" />
 <policy domain="coder" rights="read" pattern="EPS" />
 <policy domain="coder" rights="read" pattern="PDF" />
 <policy domain="coder" rights="read" pattern="XPS" />
 <policy domain="coder" rights="read|write" pattern="LABEL" />

1
Điều này không thực sự trả lời câu hỏi. Nếu bạn có một câu hỏi khác, bạn có thể hỏi nó bằng cách nhấp vào Đặt câu hỏi . Bạn cũng có thể thêm tiền thưởng để thu hút sự chú ý hơn cho câu hỏi này một khi bạn có đủ danh tiếng . - Từ đánh giá
Sirence

Cám ơn vì sự gợi ý. Tôi đã chỉnh sửa câu trả lời của mình trong lúc này. Dù sao, tôi thực sự cảm thấy nó nên là một nhận xét về câu trả lời của sNICkerssss, nhưng vì tôi không thể thêm nó là cách tốt nhất tôi đã tìm ra
lambertmular

@Sirence nó là một câu trả lời, suy nghĩ kém vì nó sao chép từ các câu trả lời khác.
9ilsdx 9rvj 0lo

@ 9ilsdx9rvj0lo bình luận của tôi là từ trước khi chỉnh sửa. stackoverflow.com/posts/52700739/revutions
Sirence
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.