[Bug] Some static images returning 403 Forbidden

Some instance zone images on render-us.worldofwarcraft.com are returning 403 Forbidden. Some of them work fine.

403 Forbidden response example

C:\Users\User>curl -v https://render-us.worldofwarcraft.com/zones/mana-tombs-small.jpg
*   Trying 52.1.88.137...
* TCP_NODELAY set
* Connected to render-us.worldofwarcraft.com (52.1.88.137) port 443 (#0)
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 194 bytes...
* schannel: sent initial handshake data: sent 194 bytes
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 2/3)
* schannel: encrypted data got 3454
* schannel: encrypted data buffer: offset 3454 length 4096
* schannel: sending next handshake data: sending 126 bytes...
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 2/3)
* schannel: encrypted data got 51
* schannel: encrypted data buffer: offset 51 length 4096
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 3/3)
* schannel: stored credential handle in session cache
> GET /zones/mana-tombs-small.jpg HTTP/1.1
> Host: render-us.worldofwarcraft.com
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 339
* schannel: encrypted data buffer: offset 339 length 103424
* schannel: decrypted data length: 310
* schannel: decrypted data added: 310
* schannel: decrypted data cached: offset 310 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 310 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 310
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 403 Forbidden
< Content-Type: text/html
< Date: Thu, 23 Apr 2020 12:21:40 GMT
< Server: nginx
< Content-Length: 162
< Connection: keep-alive
<
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host render-us.worldofwarcraft.com left intact

200 OK Example

C:\Users\User>curl -v https://render-us.worldofwarcraft.com/zones/uldaman-small.jpg
*   Trying 52.1.88.137...
* TCP_NODELAY set
* Connected to render-us.worldofwarcraft.com (52.1.88.137) port 443 (#0)
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 194 bytes...
* schannel: sent initial handshake data: sent 194 bytes
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 2/3)
* schannel: encrypted data got 3454
* schannel: encrypted data buffer: offset 3454 length 4096
* schannel: sending next handshake data: sending 126 bytes...
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 2/3)
* schannel: encrypted data got 51
* schannel: encrypted data buffer: offset 51 length 4096
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with render-us.worldofwarcraft.com port 443 (step 3/3)
* schannel: stored credential handle in session cache
> GET /zones/uldaman-small.jpg HTTP/1.1
> Host: render-us.worldofwarcraft.com
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 14520
* schannel: encrypted data buffer: offset 14520 length 103424
* schannel: decrypted data length: 13612
* schannel: decrypted data added: 13612
* schannel: decrypted data cached: offset 13612 length 102400
* schannel: encrypted data length: 879
* schannel: encrypted data cached: offset 879 length 103424
* schannel: failed to decrypt data, need more data
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 13612
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Content-Type: image/jpeg
< Date: Thu, 23 Apr 2020 12:23:13 GMT
< ETag: "080ac36fd7e4df6e49b51b137b40ab9d"
< Last-Modified: Wed, 05 Jul 2017 18:14:23 GMT
< Server: nginx
< Content-Length: 30537
< Connection: keep-alive
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 13358)
* Closing connection 0
* schannel: shutting down SSL/TLS connection with render-us.worldofwarcraft.com port 443
* schannel: clear security context handle

Use /zones/manatombs-small.jpg instead of /zones/mana-tombs-small.jpg.

Blizzard’s slugs tend to drop hyphens before replacing spaces with hyphens. The official name of that zone is “Mana-Tombs.”

Sometimes they return 403 when they really mean 404 because nothing they do is ever straightforward. It’s not an API, it’s a puzzle.

/zones/manatombs-small.jpg works but how am I supposed to know that? I’m calling https://us.api.blizzard.com/data/wow/media/journal-instance/250?namespace=static-us&locale=en_US endpoint to get the url and it returns

{
"_links": {
    "self": {
    "href": "https://us.api.blizzard.com/data/wow/media/journal-instance/250?namespace=static-8.3.0_32861-us"
    }
},
"assets": [
    {
    "key": "tile",
    "value": "https://render-us.worldofwarcraft.com/zones/mana-tombs-small.jpg"
    }
]
}

So now my bug report is that the Journal Media Instance endpoint returns invalid urls…

Some other images possibly simply don’t exist yet, see also : Large number of creature display render images missing

As summary this are the dungeons, which are not working via the response links:

  • The Stockade
  • The Temple of Atal’hakka
  • Mana-Tombs
  • Old Hillsbrad Foothills
  • The Black Morass
  • Azjol-Nerub
  • The Violet Hold (WotLK Version)
  • Shado-Pan Monastery
  • All WoD Dungeons except Upper Blackrock Spire
  • All Legion Dungeons
  • Tazavesh

Raids are all working.