Analysis of Programming Languages
Analysis of Programming Languages
Amir Naseredini1,3 , Stefan Gast2,3 , Martin Schwarzl3 , Pedro Miguel Sousa Bernardo4 , Amel Smajic3 ,
Claudio Canella3 , Martin Berger1,5 , Daniel Gruss2 ,3
1
University of Sussex, United Kingdom
2
Lamarr Security Research, Austria
3
Graz University of Technology, Austria
4
Instituto Superior Técnico, Universidade de Lisboa, Portugal
5
Turing Core, Huawei 2012 Labs, London, UK
Keywords:
Speculative Execution, Spectre Attacks, Programming Languages, Execution Environment
Abstract:
In this paper, we analyze the security of programming languages and their execution environments
(compilers and interpreters) with respect to Spectre attacks. The analysis shows that only 16 out
of 42 execution environments have mitigations against at least one Spectre variant, i.e., 26 have no
mitigations against any Spectre variant. Using our novel tool Speconnector, we develop Spectre
proof-of-concept attacks in 8 programming languages and on code generated by 11 execution envi-
ronments that were previously not known to be affected. Our results highlight some programming
languages that are used to implement security-critical code, but remain entirely unprotected, even
three years after the discovery of Spectre.
C
e-
M) iv
t)
) l
LV ct
HC el
op
ca l
LV t
)
(o am
(L st
(L if
(L bje
(G sk
ml
el
M)
el
M)
M)
M)
(G ++
(M +
(I ++
(L +
)
)
PLs
OC
C+
C+
Ru
Sw
Ha
CC
S)
nt
LV
CC
S)
nt
LV
LV
C
O
Go
DM
(G
(M
(I
(L
Attack
3 5 8 10 12 5 8 10 12 12 12 12 14
Spectre-PHT
3 6 9 10 13 6 9 10 13 13 13 13 14
Spectre-BTB
3 7 9 11 7 9 11 14
Spectre-RSB
4 9 11 9 11 14
Spectre-STL
3 6 10 13
[Munday, 2020] [Lu, 2018] [Jiang, 2018] [Carruth, 2018a]
4 7 11 14
[Randall, 2020] [Biener, 2018] [Viet H Intel, 2020] [Bacarella, 2020]
5 8 12
[GCC.GNU.ORG, 2020] [Pardoe, 2018] [Carruth, 2020]
Table 3: Managed programming languages and their compilers and which Spectre variants they can mitigate
based on the available documentation and direct responses from compilers’ developers. Symbols show whether
Spectre mitigations are available based on the documentation ( ), available but partially effective based on the
documentation ( ), not available based on the documentation ( ) or communication with developers ( ), or it
was unclear whether there are any mitigations available ( ).
n)
ru
8) Sc y)
(P yth ipt
in ml
Ja Mon t
pt
Ty ) t
(V va ke
r p
pt
a p
(O ava K)
tl ca
de ri
r
ri
kr ri
ri
Sc
J K)
OC n)
J JD
Ja M)
Ko /o
pi Sc
yP on
Py n
e
ha Sc
o
Sc
ee
ur
vy
ca l
D
o
ir
e
c
(S va
(C th
(O ava
(G ava
(C va
(o am
nJ
y)
th
a
cl
al
ml
pe
ff
oj
oo
rt
al
ix
PLs
Py
Ja
pe
ra
ra
P
Co
Cl
Gr
J
Da
C#
Sc
El
Attack
15 16 17 18 ,19 20 22 23 24 25 26 27 28 29
Spectre-PHT
15 16 18 ,19 20 ,21 22 23 24 25 26 27 28 29
Spectre-BTB
15 16 23 24 25 26 27 28 29
Spectre-RSB
15 16 21 23 24 25 26 27 28 29
Spectre-STL
15 19 24
[Oracle, 2021] [de Mooij, 2019] [Tur, 2020]
16 20 25
[Gross, 2019] [Chromium Project, 2018] [Malak and nilskp, 2018]
17 21 27
[Oracle, 2020] [Mcilroy et al., 2019] [Bacarella, 2020]
18 22
[Wagner, 2018] [Microsoft, 2018]
(ocamlc/ocamlrun)
OCaml (ocamlopt)
Java (OracleJDK)
Python (CPython)
JavaScript (V8)
Java (OpenJDK)
Java (GraalVM)
(SpiderMonkey)
Haskell (GHC)
Python (PyPy)
Swift (LLVM)
CoffeeScript
Shell (Bash)
C++ (Intel)
Rust (LLVM)
Objective-C
C++ (LLVM)
JavaScript
JavaScript
TypeScript
Emacs Lisp
Ruby (MRI)
PowerShell
Vim script
C++ (GCC)
C (Intel)
C++ (MS)
C (LLVM)
(Chakra)
C (GCC)
Clojure
C (MS)
(LLVM)
Elixir
Kotlin
Groovy
(pwsh)
Scala
OCaml
Dart
Perl
TSQL
PHP
Lua
PLs
Go
DM
C#
Attack
Depends on setting ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ - ⋆ - - - - - ⋆ ⋆ ⋆ ⋆ - - - - - - - - - - - - - - - - - - - -
Covert Channel ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✗ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✗ ✓ ✓ ✗✓ ✗
Spectre Attack ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✗ ✗ ✓ ✗ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✗ ✓ ✓ ✗ ✗ ✗ ✓ ✓ ✓ ✗ ✗ ✗ ✗ ✓ ✗ ✗ ✗ ✗
a * in Table 4 are not exploitable or at least less strate how a Spectre attack can be used to leak
vulnerable in case the available mitigations are secret information from real-world libraries. Fur-
used and best practices are followed. thermore, we argue that a mitigation at the com-
piler level prevents our attacks.
Managed Languages. For managed languages,
we were able to demonstrate a functioning covert
channel in all 18 cases (100 %). Out of the 18 lan- 6.1 Alice - Java
guage and compiler combinations, we were able
to demonstrate a Spectre attack in 14 (78 %) In our first case study, we investigate Alice 8 , a
of them. This includes Dart, Java, C#, Scala crypto library written in Java which provides en-
Groovy, Kotlin and OCaml (ocamlc/ocamlrun), cryption/decryption with AES of byte arrays and
which were so far not known to be vulnerable, files. Alice supports different key sizes, block
i.e., no Spectre attack on these has been demon- modes and padding schemes. Our goal is to find
strated before. Similar as to compiled languages, and exploit speculative execution vulnerabilities
there are several instances, again marked with a to leak the secret key which is being used to en-
* in Table 4, where the usage of the available mit- crypt/decrypt the plaintext in Alice encryption
igations and following the best practices removes and decryption methods.
or at least reduces the impact of the vulnerability. We first performed an in-depth assessment of
Our investigation of all three language cate- this library and the way that it should be used.
gories provides several interesting insights. First, The library contains three main Java classes.
contrary to interpreted and compiled languages, Class Alice which is the main API in the li-
we were able to establish a covert channel in brary for encryption purposes. Class AliceCon-
all analyzed managed languages and compilers, text which provides the context to be passed to
while in the others there was at least one where class Alice to create a new object of it. And class
we were not able to establish a covert channel. AliceContextBuilder which is used to build the
Second, compilers for compiled languages are the context. More information about Alice library is
most vulnerable to Spectre attacks if mitigations provided on their publicly available documents.
are not used and best practices are not followed. Our attack uses three Java classes, Main, Enc
Third, in all three categories, we were able to and Victim. The Main class is responsible for
extract data using a Spectre attack in at least starting two threads on the same physical core,
one instance. This further highlights that many one uses Enc while the other uses Victim. Enc
languages and their respective compilers/inter- creates an instance of an unmodified Alice and
preters have not considered Spectre attacks even performs the encryption using the context gen-
3 years after they were introduced to the public. erated by AliceContextBuilder and the password
stored within Enc. Our Victim class contains an
index gadget (cf. Figure 1) mistrained and used
by the attacker to leak the secret information.
6 CASE STUDIES As a first step in our attack, our Main class
starts both the encryption and the victim con-
In this section, we present two case studies, each taining the gadget. Once this is done, we use
using one of the vulnerable programming lan-
8
guages taken from Table 4. For both, we demon- https://rockaport.github.io/alice/
Speconnector (cf. Section 4) simply to ease the tion that uses it leaks the sensitive data pro-
exploitation, but note that extracting the data is cessed by the library by executing a gadget while
also possible directly in Java. Speconnector es- this data is directly used or parts of it remain in
tablishes a shared memory with the victim by memory. For example, cryptokit has a function
allocating 256 pages and filling them with the transform_string t s, which applies the given
known magic value. The victim is mistrained transform object t to the given string s. The
to perform the speculative out-of-bounds access transform object itself describes the desired cryp-
which causes a secret-dependent cache access on tographic action, including its parameters. For
our shared memory. To extract the password AES encryption, these include the key and the
stored in Enc, Speconnector constantly performs initialization vector (IV). After the transforma-
Flush+Reload on the memory shared with the tion, the internal state of the transform object t
victim. As OpenJDK does not contain any Spec- is wiped, but this does not include the key and
tre mitigations (cf. Table 3), Speconnector can the IV. Furthermore, the string s is not wiped,
successfully extract the password, compromising either. The reason is that, in OCaml, strings are
the whole encryption system. passed by reference across function calls. This
makes it unsafe for the library function to over-
6.2 cryptokit - OCaml write these strings as the calling code might still
need them. Therefore, the application itself is re-
sponsible for wiping the key, the IV and the plain-
Our second case study performs a thorough anal- text. However, it is worth noting that a direct
ysis of cryptokit [Leroy, 2020], a widely used hint about this is missing in the current documen-
OCaml crypto library. As Tables 2 and 3 show, tation (version 1.16.1) of the library [Leroy, 2020]
the documentation of OCaml already indicates even though it offers a function wipe_string s
that no mitigations are available against Spectre for this purpose. Furthermore, the official OCaml
attacks. It is an important case study, as so far documentation even states that strings should be
OCaml has not been shown to be affected. treated as being immutable and advises against
In this analysis, we encountered several factors overwriting them [Leroy et al., 2020].
that complicate the analysis. First, OCaml can
be either compiled into native machine code using To verify and substantiate this finding, we
the ocamlopt compiler, or it can be compiled into performed the following experiment. Follow-
bytecode using the ocamlc compiler, which is then ing a best-practice example of using cryptokit,
executed by the ocamlrun runtime. Depending on we wrote a proof-of-concept application that en-
the compiler being used, it can either be regarded crypts user-provided plaintext. Similar to the
as a compiled or a managed language. Second, Java case study in the previous section, we al-
the environment is important as well since some locate 256 contiguous pages using OCaml’s Ar-
gadgets show themselves only in some particu- ray1 module and fill them with the known magic
lar configurations. For example, while we could value. Then we add a Spectre gadget to the ap-
not cause any data leakage with our Spectre in- plication. Using that gadget to perform specula-
dex gadget when using the ocamlc bytecode com- tive out-of-bounds accesses on a string and con-
piler and the ocamlrun runtime on an older In- necting Speconnector to it, we were able to suc-
tel Core2Duo T9600 CPU, the exact same gad- cessfully reconstruct the original plaintext after
get worked well when run on a more modern In- encrypting it and after the last reference to the
tel Core I7-6700K CPU. When compiled to na- plaintext went out of scope. To find the actual lo-
tive code using the ocamlopt compiler, the same cation of the plaintext in memory, we computed
source code produces a gadget that works on both the required offset for the out-of-bounds access
machines. For best reproducibility, we therefore in the proof-of-concept application itself. This
only used the ocamlopt native compiler in the fol- showed that the offset is the same each time the
lowing case study. program is run, making it predictable for the at-
The cryptokit library implements a variety tacker. Obtaining the key or the IV instead of
of cryptographic primitives for use in security- the plaintext should also be possible using the
sensitive applications, including symmetric-key same approach. By this, we show that an OCaml
ciphers, public-key cryptography, and hash func- application can leak sensitive data via transient
tions. Our manual analysis has not shown an execution side-channels as long as that data is in
exploitable Spectre gadget within the library it- memory. As neither the native compiler (ocam-
self, but the possibility exists that the applica- lopt) nor the bytecode compiler (ocamlopt) and
runtime (ocamlrun) provide any form of mitiga- are susceptible to Spectre attacks. Our results in-
tions, it is the task of the application developer to dicate that it is necessary to do more research into
ensure that no Spectre gadget is executed while mitigations that target a wide range of program-
sensitive data resides in memory. To wipe sensi- ming languages and execution environments.
tive data from memory, the programmer has to
overwrite strings which are otherwise considered
to be immutable by the language. REFERENCES
Furthermore, sensitive data can also remain
in internal input or output buffers, which can- [Bacarella, 2020] Bacarella, M. (2020). Spectre miti-
not be overwritten by the application developer. gations in ocaml compiler?!
For example, to read files, OCaml uses channel [Bhattacharyya et al., 2019] Bhattacharyya, A.,
objects, which are buffered [OCAML.ORG, 2021] Sandulescu, A., Neugschwandt ner, M., Sorniotti,
yet provide no means of wiping that buffer A., Falsafi, B., Payer, M., and Kurmus, A. (2019).
[Leroy et al., 2020]. We verified that sensitive SMoTherSpectre: exploiting speculative execution
data can indeed be leaked from such buffers by through port contention. In CCS.
modifying our experiment to leak the data di- [Biener, 2018] Biener, R. (2018). GCC 7.3 released.
rectly from the input buffer of the standard in- [Canella et al., 2020a] Canella, C., Khasawneh,
put channel. Again, we computed the offset for K. N., and Gruss, D. (2020a). The Evolution of
the out-of-bounds access in the victim. We ob- Transient-Execution Attacks. In GLSVLSI.
served that Address Space Layout Randomiza- [Canella et al., 2020b] Canella, C., Pudukotai Di-
tion (ASLR) leads to different offsets each time nakarrao, S. M., Gruss, D., and Khasawneh, K. N.
the program is run, because the channel buffer (2020b). Evolution of Defenses against Transient-
is stored in another memory mapping than the Execution Attacks. In GLSVLSI.
OCaml strings. However, the offset of the buffer [Canella et al., 2019] Canella, C., Van Bulck, J.,
within its memory mapping itself is constant. Schwarz, M., Lipp, M., von Berg, B., Ortner, P.,
Turning off ASLR results in a constant offset be- Piessens, F., Evtyushkin, D., and Gruss, D. (2019).
tween the OCaml string and the channel buffer. A Systematic Evaluation of Transient Execution
In conclusion, sensitive data might live longer Attacks and Defenses. In USENIX Security Sym-
posium. Extended classification tree and PoCs at
in memory than the developer might expect and, https://transient.fail/.
therefore, also be susceptible to Spectre attacks
for quite a long time. Hence, it is imperative that [Carruth, 2018a] Carruth, C. (2018a).
OCaml provides ways for a developer to either [Carruth, 2018b] Carruth, C. (2018b). RFC: Specu-
reliably remove data from sensitive buffers or to lative Load Hardening (a Spectre variant #1 miti-
hinder transient execution at all. gation).
[Carruth, 2020] Carruth, C. (2020). Speculative load
hardening.
7 CONCLUSION [Chládek, 2020] Chládek, J. (2020). rust-spectre.
[Chromium Project, 2018] Chromium Project
(2018). Mitigating Side-Channel Attacks.
We presented a systematic analysis of different
programming languages and their respective com- [de Mooij, 2019] de Mooij, J. (2019). [Meta] Spectre
pilers/interpreters against Spectre attacks. Our JIT mitigations.
analysis uncovered Spectre attacks in 16 differ- [Duete, 2018] Duete, L. (2018). spectre-go.
ent programming languages with 8 of them not [Evtyushkin et al., 2016] Evtyushkin, D., Pono-
investigated so far and not known to be vulner- marev, D., and Abu-Ghazaleh, N. (2016). Jump
able. We also demonstrated practical proof-of- over ASLR: Attacking branch predictors to bypass
concept attacks and evaluated their applicability ASLR. In MICRO.
to these programming languages and their respec- [Fustos et al., 2019] Fustos, J., Farshchi, F., and
tive execution environments. With Speconnector, Yun, H. (2019). SpectreGuard: An Efficient Data-
we presented a novel approach and tool that can centric Defense Mechanism against Spectre At-
be used to quickly verify whether a programming tacks. In DAC.
language and execution environment is vulnera- [GCC.GNU.ORG, 2020] GCC.GNU.ORG (2020).
ble to Spectre attacks. We further presented two Other built-in functions provided by gcc.
case studies of real world libraries in two different [Ge et al., 2016] Ge, Q., Yarom, Y., Cock, D., and
programming languages, demonstrating that they Heiser, G. (2016). A Survey of Microarchitectural
Timing Attacks and Countermeasures on Contem- [Malak and nilskp, 2018] Malak, M. and nilskp
porary Hardware. Journal of Cryptographic Engi- (2018). Meltdown/spectre.
neering. [Mcilroy et al., 2019] Mcilroy, R., Sevcik, J., Tebbi,
[Gross, 2019] Gross, A. (2019). Java and speculative T., Titzer, B. L., and Verwaest, T. (2019). Spectre
execution vulnerabilities. is here to stay: An analysis of side-channels and
[Horn, 2018] Horn, J. (2018). speculative execution, speculative execution. arXiv:1902.05178.
variant 4: speculative store bypass. [Microsoft, 2018] Microsoft (2018). Mitigating spec-
[Jiang, 2018] Jiang, J. L. (2018). Using intel® ulative execution side-channel attacks in Microsoft
compilers to mitigate speculative execution side- Edge and Internet Explorer.
channel issues. [Mittal, 2018] Mittal, S. (2018). A Survey of
[Khasawneh et al., 2019] Khasawneh, K. N., Ko- Techniques for Dynamic Branch Prediction.
ruyeh, E. M., Song, C., Evtyushkin, D., Pono- arxiv:1804.00261.
marev, D., and Abu-Ghazaleh, N. (2019). Safe- [Munday, 2020] Munday, M. (2020). consider extend-
Spec: Banishing the Spectre of a Meltdown with ing ’-spectre’ option to other architectures.
Leakage-Free Speculation. In DAC.
[Kiriansky et al., 2018] Kiriansky, V., Lebedev, I., [OCAML.ORG, 2021] OCAML.ORG (2021). File
Amarasinghe, S., Devadas, S., and Emer, J. (2018). manipulation.
DAWG: A Defense Against Cache Timing Attacks [Oleksenko et al., 2018] Oleksenko, O., Trach, B.,
in Speculative Execution Processors. In MICRO. Reiher, T., Silberstein, M., and Fetzer, C. (2018).
[Kocher et al., 2019] Kocher, P., Horn, J., Fogh, A., You Shall Not Bypass: Employing data de-
Genkin, D., Gruss, D., Haas, W., Hamburg, M., pendencies to prevent Bounds Check Bypass.
Lipp, M., Mangard, S., Prescher, T., Schwarz, M., arXiv:1805.08506.
and Yarom, Y. (2019). Spectre Attacks: Exploiting [Oracle, 2020] Oracle (2020). Oracle graalvm enter-
Speculative Execution. In S&P. prise edition 20 guide.
[Kocher, 1996] Kocher, P. C. (1996). Timing Attacks [Oracle, 2021] Oracle (2021). Oracle JVM Security
on Implementations of Diffe-Hellman, RSA, DSS, Enhancements.
and Other Systems. In CRYPTO.
[Palit et al., 2019] Palit, T., Monrose, F., and Poly-
[Koruyeh et al., 2018] Koruyeh, E. M., Khasawneh, chronakis, M. (2019). Mitigating data leakage by
K., Song, C., and Abu-Ghazaleh, N. (2018). Spec- protecting memory-resident sensitive data. In AC-
tre Returns! Speculation Attacks using the Return SAC.
Stack Buffer. In WOOT.
[Pardoe, 2018] Pardoe, A. (2018). Spectre mitiga-
[Lattner and Adve, 2004] Lattner, C. and Adve, tions in msvc.
V. S. (2004). LLVM: A compilation framework
for lifelong program analysis & transformation. In [Pizlo, 2018] Pizlo, F. (2018). What Spectre and
IEEE / ACM International Symposium on Code Meltdown mean for WebKit.
Generation and Optimization – CGO. [Randall, 2020] Randall, K. (2020). consider extend-
[Lee et al., 2017] Lee, S., Shih, M., Gera, P., Kim, ing ’-spectre’ option to other architectures.
T., Kim, H., and Peinado, M. (2017). Inferring [Schwarz et al., 2018] Schwarz, M., Lipp, M., and
Fine-grained Control Flow Inside SGX Enclaves Canella, C. (2018). misc0110/PTEditor: A small
with Branch Shadowing. In USENIX Security library to modify all page-table levels of all pro-
Symposium. cesses from user space for x86 64 and ARMv8.
[Leroy, 2020] Leroy, X. (2020). cryptokit/cryp-
tokit.mli at release1161. [Schwarz et al., 2020] Schwarz, M., Lipp, M.,
Canella, C., Schilling, R., Kargl, F., and Gruss,
[Leroy et al., 2020] Leroy, X., Doligez, D., Frisch, A., D. (2020). ConTExT: A Generic Approach for
Garrigue, J., Rémy, D., and Vouillon, J. (2020). Mitigating Spectre. In NDSS.
The OCaml system release 4.11 – Documentation
and user’s manual. [support, 2020] support, M. (2020). Kb4073225 - sql
server guidance to protect against spectre, melt-
[Lipp et al., 2018] Lipp, M., Schwarz, M., Gruss, D., down and micro-architectural data sampling vul-
Prescher, T., Haas, W., Fogh, A., Horn, J., Man- nerabilities.
gard, S., Kocher, P., Genkin, D., Yarom, Y., and
Hamburg, M. (2018). Meltdown: Reading Kernel [Tomasulo, 1967] Tomasulo, R. M. (1967). An effi-
Memory from User Space. In USENIX Security cient algorithm for exploiting multiple arithmetic
Symposium. units. IBM Journal of research and Development,
11(1):25–33.
[Lu, 2018] Lu, H. (2018). x86: Cve-2017-5715, aka
spectre. [Tur, 2020] Tur, J. (2020). Consider porting inter-
[Maisuradze and Rossow, 2018] Maisuradze, G. and locked.speculationbarrier() from .net 4.8.
Rossow, C. (2018). ret2spec: Speculative Execu- [Viet H Intel, 2020] Viet H Intel (2020). Spectre
tion Using Return Stack Buffers. In CCS. mitigations in intel c++ compiler.
[Wagner, 2018] Wagner, L. (2018). Mitigations land-
ing for new class of timing attack.
[Yan et al., 2018] Yan, M., Choi, J., Skarlatos, D.,
Morrison, A., Fletcher, C. W., and Torrellas, J.
(2018). InvisiSpec: Making Speculative Execution
Invisible in the Cache Hierarchy. In MICRO.
A EXPERIMENT SETUP
Table 5 summarizes the setups of our experiments.
Table 5: Programming languages and their compilers/interpreters and the CPU, operating system, and the
execution environment which we used for our experiments. The first row (source of attack) shows if we have
performed the attack ( ), we have not tried but other have done it ( ), we were not able to perform the attack
( ). The next row (depends on settings) shows if compilers/interpreters are not vulnerable (⋆) or are vulnerable
(-) if the existing best practices for them are followed. A checkmark (✓) shows that it was used for an experiment
while a dash (-) indicates that the respective language was not tested on this CPU or OS. For the execution
environment, the dash (-) indicates that it does not apply to the respective language and compiler/interpreter.
(ocamlc/ocamlrun)
OCaml (ocamlopt)
Java (OracleJDK)
Python (CPython)
JavaScript (V8)
Java (OpenJDK)
Java (GraalVM)
(SpiderMonkey)
Haskell (GHC)
Python (PyPy)
Swift (LLVM)
CoffeeScript
Shell (Bash)
C++ (Intel)
Rust (LLVM)
Objective-C
C++ (LLVM)
JavaScript
JavaScript
TypeScript
Emacs Lisp
Ruby (MRI)
PowerShell
Vim script
C++ (GCC)
C (Intel)
C++ (MS)
C (LLVM)
(Chakra)
C (GCC)
Clojure
C (MS)
Kotlin
Groovy
(LLVM)
Elixir
(pwsh)
Scala
OCaml
Dart
Perl
TSQL
PHP
Lua
PLs
Go
DM
C#
Attack
Source of attack
Depends on setting ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ ⋆ - ⋆ - - ⋆ - - - - - ⋆ ⋆ ⋆ ⋆ - - - - - - - - - - - - - - - - - -
i7-2630QM - ✓ - - - ✓ - - - - ✓ - ✓ - - ✓ - - ✓✓✓ - - - - - - - ✓ - ✓ - - - - - - ✓ - - - -
CPU
i5-6200U - ✓ - ✓ ✓ ✓ - ✓ ✓ - ✓ - ✓ - ✓ ✓ - - ✓✓✓ - - - - - - - ✓ - ✓ - - - - - - - - ✓ - -
i7-6700K - - - - - - - - - - - ✓ - - - - ✓✓ - - - - - - - - ✓ - - ✓ - ✓ ✓ ✓ ✓✓✓ - - - ✓✓
Xeon Silver 4208 - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - ✓ - - -
Ubuntu 20.4 LTS - ✓ - ✓ ✓ ✓ - ✓ ✓ - ✓ ✓ ✓ - ✓ ✓✓✓✓✓✓ - - - - - ✓ ✓✓✓ ✓ ✓ ✓ ✓ ✓✓✓✓ ✓ ✓✓✓
OS
gcc 9.3.0 - ✓ - - - ✓ - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - - -
IntelCompiler 2021.1.2 - - - ✓ - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
clang 12.0.0 - - - - ✓ - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
kotlinc-jvm 1.4.20 (JRE 11.0.9.1) - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Swift 5.3.1 - - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Groovy 3.0.4 - - - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GHC 8.6.5 - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - - -
ocamlopt 4.08.1 - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - - -
Dart SDK version: 2.10.5 (stable) - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - - - - -
JAVA 11.0.9 - - - - - - - - - - - - - - - - - - ✓✓ - - - - - - - - - - - - - - - - - - - - - -
GRAALVM 20.3.0 - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - - - - - - - - - -
Environment
PyPy 7.3.1 - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - - - -
.Net Core (dotnet) 5.0.100 - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - - -
Scala 2.13.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - - -
Elixir - IEx 1.9.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - - -
Clojure 1.10.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - - -
CPython 3.8.2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - - -
ocamlc/ocamlrun 4.08.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - - -
GNU Emacs 26.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - - -
ruby 2.7.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - - -
PHP 7.4.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - - -
bash 5.0.17(1)-release - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - - -
perl v5.30.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - - -
PowerShell 7.1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - - -
SQL Server Command Line Tool Version 17.6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ - -
Lua 5.4.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓ -
vim 8.1-2269 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ✓