konwersja: nie autoryzowany `aaaa` @ error / constit.c / ReadImage / 453


309

Chcę utworzyć zdjęcie captcha za pomocą convertImageMagick.

I śledzę to , ale jest jakiś problem.

Wejście w mojej powłoce linux:

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

Błąd jest następujący:

konwersja: brak autoryzacji adfgh@ error / constit.c / ReadImage / 453. konwersja: brak nazwy pliku obrazu ./test.png@ error / convert.c / ConvertImageCommand / 3015

My ImageMagick: Wersja: 6.7.2-7, instaluję go za pomocą yum install ImageMagick.

Nie mam pojęcia. Wszelkie porady proszę?


7
Podwójna kontrola policy.xml. Opcje bezpieczeństwa mogą uniemożliwić label:protokół.
— emcconville

2
dzięki! Zmieniam plik policy.xml, komentuję ten wiersz „<domain domain =„ coder ”rights =” none ”pattern =„ LAEBL ”>”. To działa ! Dzięki !
— jianwei

3
Gdzie jest plik policy.xml?
— Arnold Roa

3
/etc/ImageMagick/policy.xml
— jianwei

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

Odpowiedzi:


445

Uwaga: rozwiązanie w tej i innych odpowiedziach obejmuje wyłączenie środków bezpieczeństwa służących do naprawy luk w zabezpieczeniach wykonywania dowolnego kodu. Zobacz na przykład to związane z ghostscript i to ogłoszenie związane z ubuntu . Korzystaj z tych rozwiązań tylko wtedy, gdy dane wejściowe convertpochodzą z zaufanego źródła.

Korzystam z ImageMagick w php (v.7.1), aby pokroić plik PDF na obrazy.

Najpierw dostałem błędy takie jak:

Typ wyjątku: ImagickException

Komunikat wyjątku: brak autoryzacji ..... @ error / constit.c / ReadImage / 412

Po kilku zmianach /etc/ImageMagick-6/policy.xmlzaczynam dostawać błędy:

Typ wyjątku: ImagickException

Komunikat o wyjątku: nie można utworzyć pliku tymczasowego ..... Odmowa dostępu @ error / pdf.c / ReadPDFImage / 465

Moja poprawka :

W pliku /etc/ImageMagick-6/policy.xml(lub /etc/ImageMagick/policy.xml)

  1. linia komentarza

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
  2. zmień linię

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

    do

    <policy domain="coder" rights="read|write" pattern="PDF" />
  3. dodaj linię

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

Następnie uruchom ponownie serwer WWW (nginx, apache).


54
To powinna być akceptowalna odpowiedź, jeśli wystąpił ten problem na komputerze z systemem Ubuntu od 4 października 2018 r. Jakieś inne problemy z innych dystrybucji?
— LucasBr

12
Właśnie dostaję ten problem już dziś na Ubuntu 16.04. Czy coś się zmieniło? Nie musiałem też dodawać linii LABEL, po prostu zmień prawa do PDF z „none” na „read”.
— Bryant Kou,

4
Rozwiązuje bardzo podobny problem w moim Ubuntu 18.04.1 LTS box
— mhernandez

3
Na moim serwerze policy.xmlplik został ostatnio zaktualizowany 29 września, ale problemy pojawiają się dzisiaj. Używam serwera Ubuntu 14.04.5, ale ustaw automatyczną aktualizację. W dzienniku apt znalazłem informacje o tej aktualizacji:imagemagick-common:amd64 (6.7.7.10-6ubuntu3.12, 6.7.7.10-6ubuntu3.13),
— Donny Kurnia


161

Używam wielokrotnie convertpolecenia ImageMagic do konwersji *.tifplików*.pdf pliki.

Nie wiem dlaczego, ale dzisiaj zacząłem otrzymywać następujący błąd:

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

Po wydaniu polecenia:

convert a.tif a.pdf

Po przeczytaniu powyższych odpowiedzi dokonałem edycji pliku /etc/ImageMagick-6/policy.xml

i zmieniłem linię:

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

do

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

a teraz wszystko działa dobrze.

Mam „ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28” na „Ubuntu 16.04.5 LTS”.


1
Korzystam z openSuse Leap 15.0 i użyłem „porównaj”, aby porównać strony PDF, ten sam błąd, nawet po aktualizacji openSuse 10 października 2018. Po zmianie linii, jak opisano tutaj, zadziałało.
— Keks Dawka

Jestem na Ubuntu Xenial 16.04 LTS i nagle zacząłem widzieć ten błąd w logach Apache. Potwierdzam, że po zmianie opisanej tutaj polityki problem został rozwiązany.
— user2641103,

5
Jest to minimalna poprawna odpowiedź - odpowiedź sNICkerssss jest technicznie poprawna, jednak tylko jeden krok jest potrzebny do użycia convertpliku PDF w wierszu polecenia .
— davidA

1
Ten „problem” to szybka i brudna „poprawka” funkcji Ghostscript, w dłuższej perspektywie powinniśmy znaleźć zamiennik Ghostscript (i prawdopodobnie ImageMagick).
— 9ilsdx 9rvj 0lo

4
Nie rób tego To ograniczenie zostało wprowadzone jako środek bezpieczeństwa ze względu na możliwe zdalne wykonanie kodu (patrz launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Prawidłowa odpowiedź brzmi: powinieneś użyć innego programu do tego zadania.
— Marian

66

Uwaga: to rozwiązanie i każde inne rozwiązanie „edytuj plik policy.xml” wyłącza zabezpieczenia przed lukami w zabezpieczeniach przed wykonaniem dowolnego kodu w ImageMagick. Jeśli potrzebujesz przetworzyć dane wejściowe, których nie kontrolujesz w 100%, powinieneś użyć innego programu (nie ImageMagick).

Jeśli nadal tu jesteś, próbujesz edytować obrazy, nad którymi masz pełną kontrolę, wiesz, że są bezpieczne i nie mogą być edytowane przez użytkowników.

Tam jest /etc/ImageMagick/policy.xml plik instalowany przez yum. Nie zezwala na prawie wszystko (dla bezpieczeństwa i dla ochrony twojego systemu przed przeciążeniem wywołaniami ImageMagick).

Jeśli otrzymujesz ReadImagebłąd jak wyżej, możesz zmienić linię na:

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

co powinno rozwiązać problem.

Plik zawiera sporo dokumentacji, więc powinieneś to przeczytać. Na przykład, jeśli potrzebujesz więcej uprawnień, możesz je połączyć w następujący sposób:

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

... co jest lepsze niż usunięcie wszystkich kontroli uprawnień (tj. usunięcie lub skomentowanie linii).


2
Nie rób tego To ograniczenie zostało wprowadzone jako środek bezpieczeństwa ze względu na możliwe zdalne wykonanie kodu (patrz launchpad.net/ubuntu/+source/imagemagick/8:6.7.7.10-6ubuntu3.13 ). Prawidłowa odpowiedź brzmi: powinieneś użyć innego programu do tego zadania.
— Marian

5
@Marian Korzystanie z innego programu nie jest pomocne - PO zapytał konkretnie o ImageMagick. Odpowiedź powinna brzmieć: „Powinieneś wiedzieć, co robisz, rób to na własne ryzyko, upewnij się, że system jest bezpieczny, oto dlaczego nie powinieneś, a oto jak to zrobić”.
— KolonUK

2
OP (i ludzie przybywający tu przez wyszukiwarkę internetową, w tym ja) używali ImageMagick do tej pory; więc ich pierwszą próbą rozwiązania tego problemu jest znalezienie rozwiązania za pomocą ImageMagick, ponieważ wymaga to najmniejszej liczby zmian. Nie oznacza to, że bezwarunkowo chcą korzystać z ImageMagick.
— Marian

3
Uważam, że to lekceważące podejście do bezpieczeństwa jest bardzo nieodpowiednie w przypadku witryny z pytaniami i odpowiedziami widzianymi przez tysiące osób (ta strona była wyświetlana 100 000 razy i jest najlepszym wynikiem wyszukiwania tego problemu) - i bądźmy szczerzy, tutaj była duża i głośna próba podkreślenia znaczenie tej luki, w tym dedykowanej witryny utworzonej w celu jej opublikowania ( imagetragick.com ) - sugestia Mariana, że ​​należy szukać alternatyw zamiast omijać zabezpieczenia, jest ważna. Zamiast tego wybrałem GIMP. popplerjest alternatywą dla GhostScript (który convertpolega na rasteryzacji stron PDF do obrazów)
— Louis Maddox

1
Czy nie ma opcji wiersza polecenia, która tymczasowo wyłącza politykę bezpieczeństwa? Następnie moglibyśmy użyć go do określonych plików PDF, którym ufamy.
— HRJ

27

Jeśli po instalacji ktoś musi to zrobić za pomocą jednego polecenia, uruchom to!

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
Krótszy:sed -i 's/\(<policy domain="coder" rights=\)"none" \(pattern="PDF" \/>\)/\1"read|write"\2/g' /etc/ImageMagick-6/policy.xml
— lewej około

5
Bardziej zwięzłe. I sudo jest wymagane do edycji pliku w / etc sudo sed -i '/PDF/s/none/read|write/' /etc/ImageMagick-6/policy.xml
— Naveed

pamiętaj, aby zaktualizować ghostscript kb.cert.org/vuls/id/332928
— porządku, mówi: Przywróć Monikę

24

Odpowiedź z największą liczbą głosów (nie mam wystarczającej reputacji, aby dodać komentarz) sugeruje skomentowanie linii MVG, ale pamiętaj o tym:

CVE-2016-3714

ImageMagick obsługuje pliki „.svg / .mvg”, co oznacza, że ​​osoby atakujące mogą tworzyć kod w języku skryptowym, np. MSL (Magick Scripting Language) i MVG (Magick Vector Graphics), przesyłać go na serwer zamaskowany jako plik obrazu i wymuszać oprogramowanie do uruchamiania złośliwych poleceń po stronie serwera, jak opisano powyżej. Na przykład dodanie następujących poleceń do pliku i przesłanie go do serwera WWW korzystającego z wrażliwej wersji ImageMagick spowoduje uruchomienie polecenia „ls -la” na serwerze.

exploit.jpg:

push graficzny kontekst kontekstowy 0 0 640 480 wypełnij „url ( https://website.com/image.png " | ls "-la)" pop graficzny kontekst

I

Każda wersja poniżej 7.0.1-2 lub 6.9.4-0 jest potencjalnie podatna na atak, a strony, których to dotyczy, powinny jak najszybciej uaktualnić do najnowszej wersji ImageMagick.

Źródło


3
Nie skomentowałem MVG i PDF -> Konwersja JPG nadal działa. Dziękuję Ci.
— Rimu Atkinson,

1
6.7.7-10 wygląda jak najnowsza wersja, wydana 28.09.2018). czego mi brakuje? $convert --version Version: ImageMagick 6.7.7-10 2018-09-28 Q16 http://www.imagemagick.org
— HaPsantran,

dostępna jest nowsza wersja imagemagick.org/script/download.php Prawdopodobnie Twoja dystrybucja Linuksa używa starszej wersji. Ubuntu 16.04 używa obecnie 6.8.9-9
— Nikołaj Iwanow

1
Fajnie, więc właściwym rozwiązaniem dla zespołu Ubuntu byłoby zaktualizowanie imagemagick do nowszej wersji, a nie uszkodzenie istniejącej.
— 9ilsdx 9rvj 0lo

2
Nie. Ubuntu jest dystrybucją zawierającą funkcje i nie będzie dostarczać nowszych wersji.
— Buo-Ren Lin

19

Po ostatniej aktualizacji mojego systemu Ubuntu 16.04 zacząłem również pojawiać się ten błąd podczas próby konwersji plików .ps w celu ich konwersji na pliki pdf.

Ta poprawka zadziałała dla mnie:

W biegu terminalowym:

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

To powinno otworzyć plik policy.xml w edytorze tekstu gedit. Jeśli nie, twoja magia obrazu może zostać zainstalowana w innym miejscu. Następnie zmień

rights="none" 

do

rights="read | write" 

dla linii PDF, EPS i PS w dolnej części pliku. Zapisz i wyjdź, a magia obrazu powinna znów działać.


1
pamiętaj, aby zaktualizować ghostscript kb.cert.org/vuls/id/332928
— porządku, mówi: Przywróć Monikę

Pomogło to w Ubuntu 18.04 ImageMagick 6.9.7-4. Dzięki.
— I

11

Wystarczy usunąć plik /etc/ImageMagick/policy.xml.


1
proste, ale idealne. Zrobiłem to, ponieważ test nie
— udał się na Travis

1
To jedyne rozwiązanie, które działało z ton postów. Zmieniłem nazwę na policy-disabled.xml. Myślę, że przywrócę go, dopóki nie
— upewnię się,

Po ponownym uruchomieniu jądra w przypadku notesu jupyter
— Nicole Douglas

2

Po przeczytaniu kilku sugestii i połączeniu pomysłów, dla mnie konieczne były następujące zmiany w pliku /etc/ImageMagick-6/policy.xml:

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

... prawa = „brak” nie pomogło. ... wzór = „ETYKIETA” nie była konieczna. Chociaż nie pracuję z dużymi plikami png (tylko ~ 1 Mb), konieczne były również pewne zmiany limitów pamięci:

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

(zamiast 256Mib) i

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

(zamiast 128 MB)



2

Jeśli nie potrzebujesz obsługiwać plików rastrowych i plików PDF / PS / EPS za pomocą tego samego narzędzia, nie poluzuj zabezpieczeń ImageMagick.

Zamiast tego, zachowaj swoją głęboką obronę dla swoich aplikacji internetowych w nienaruszonym stanie, sprawdź, czy Ghostscript został załatany pod kątem wszystkich znanych -dSAFERluk, a następnie wywołaj go bezpośrednio.

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
  • -dSAFER rezygnuje ze starszej kompatybilności „Uruchom Postscript uzyska pełne pozwolenie na interakcję ze światem zewnętrznym jako tryb pełnego języka programowania”.
  • -r300 ustawia pożądaną DPI na 300 (domyślnie 72)
  • -sDEVICEokreśla format wyjściowy ( inne opcje można znaleźć w sekcji Urządzenia instrukcji).
  • -o jest skrótem od -dBATCH -dNOPAUSE -sOutputFile=
  • W tej sekcji instrukcji Ghostscript podano kilka przykładowych formatów wyjściowych plików wieloplikowych, ale dla faktycznej definicji składni wskazuje ona dokumentację funkcji C printf (3) .

Jeśli renderujesz pliki EPS, dodaj, -dEPSCropaby nie dopasowywał wydruków do rozmiaru strony i nie służy -sDEVICE=pngalphado uzyskania przezroczystego tła.


Dzięki za bezpieczniejsze rozwiązanie. Nie jestem jednak pewien, czy kiedykolwiek będę w stanie zapamiętać opcje wiersza poleceń GhostScript! :)
— Cris Luengo

@CrisLuengo ja też nie. Dlatego opublikowałem go w tylu wynikach Google, ile mogłem znaleźć, gdzie była to dobra odpowiedź na postawione pytanie. : P
— ssokolow

1
Znalazłem dobre wyniki przy -r600 -dDownScaleFactor=4tworzeniu pliku o rozdzielczości 150 dpi, ale z lepszym antyaliasingiem.
— John Cole

0

Miałem również błąd error/constitute.c/ReadImage/453 podczas próby konwersji eps na gif z magią obrazu. Wypróbowałem rozwiązanie zaproponowane przez sNICkerssss, ale nadal miałem błędy (choć różne od pierwszego) e error/constitute.c/ReadImage/412 Rozwiązaniem problemu było umieszczenie readinnych wpisów

 <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
To tak naprawdę nie odpowiada na pytanie. Jeśli masz inne pytanie, możesz je zadać, klikając Zadaj pytanie . Możesz także dodać nagrodę za zwrócenie większej uwagi na to pytanie, gdy będziesz mieć wystarczającą reputację . - Z recenzji
— Sirence,

Dzieki za sugestie. W międzyczasie zredagowałem swoją odpowiedź. W każdym razie naprawdę czułem, że powinien to być komentarz do odpowiedzi sNICkerssss, ale ponieważ nie mogę tego dodać, jest to najlepszy sposób, jaki wymyśliłem
— lambertmular,

@ Sirence to odpowiedź, uważana za kiepską, ponieważ kopiuje z innych odpowiedzi.
— 9ilsdx 9rvj 0lo

@ 9ilsdx9rvj0lo mój komentarz był przed edycją. stackoverflow.com/posts/52700739/revisions
— Sirence
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.