diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt
index 96889cbbb6a9871806910feeffa4602beb9cdf6e..c491add409397a08a0d041f74e1a9633c5d80ae6 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/server/WebServerManager.kt
@@ -1,5 +1,6 @@
 package org.briarproject.mailbox.core.server
 
+import com.fasterxml.jackson.databind.MapperFeature.BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES
 import io.ktor.application.install
 import io.ktor.auth.Authentication
 import io.ktor.features.CallLogging
@@ -50,7 +51,9 @@ internal class WebServerManagerImpl @Inject constructor(
                 }
             }
             install(ContentNegotiation) {
-                jackson()
+                jackson {
+                    enable(BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES)
+                }
             }
             configureBasicApi(setupManager, wipeManager)
             configureContactApi(contactsManager)
diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt
index 0d363e3a69042d8aa4879c8e719ade079da9b909..f84eee6329f8e8cd1c38ca41c4856868356c4e40 100644
--- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt
+++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/server/WebServerIntegrationTest.kt
@@ -1,9 +1,27 @@
 package org.briarproject.mailbox.core.server
 
+import com.fasterxml.jackson.annotation.JsonTypeInfo
+import com.fasterxml.jackson.databind.MapperFeature.BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES
+import io.ktor.application.call
+import io.ktor.application.install
 import io.ktor.client.request.get
+import io.ktor.client.request.post
 import io.ktor.client.statement.HttpResponse
 import io.ktor.client.statement.readText
+import io.ktor.features.CallLogging
+import io.ktor.features.ContentNegotiation
+import io.ktor.http.ContentType
+import io.ktor.http.HttpStatusCode
+import io.ktor.http.contentType
+import io.ktor.jackson.jackson
+import io.ktor.request.receive
+import io.ktor.response.respond
+import io.ktor.routing.post
+import io.ktor.routing.routing
+import io.ktor.server.engine.embeddedServer
+import io.ktor.server.netty.Netty
 import kotlinx.coroutines.runBlocking
+import org.briarproject.mailbox.core.server.WebServerManager.Companion.PORT
 import org.junit.jupiter.api.Test
 import kotlin.test.assertEquals
 
@@ -22,4 +40,38 @@ class WebServerIntegrationTest : IntegrationTest() {
         assertEquals(404, response.status.value)
     }
 
+    @Test
+    fun testJacksonUnsafeDeserialization(): Unit = runBlocking {
+        val port = PORT + 1
+        val server = embeddedServer(Netty, port, watchPaths = emptyList()) {
+            install(CallLogging)
+            install(ContentNegotiation) {
+                jackson {
+                    enable(BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES)
+                }
+            }
+            routing {
+                post("/") {
+                    println(call.receive<Wrapper>())
+                    call.respond(HttpStatusCode.OK, "OK")
+                }
+            }
+        }
+        try {
+            server.start()
+            val response = httpClient.post<HttpResponse>("http://127.0.0.1:$port/") {
+                contentType(ContentType.Application.Json)
+                body = Wrapper().apply { value = "foo" }
+            }
+            assertEquals(500, response.status.value)
+        } finally {
+            server.stop(0, 0)
+        }
+    }
+
+    internal class Wrapper {
+        @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
+        var value: Any? = null
+    }
+
 }